75

POST 是否足够安全以发送登录凭据?

还是必须使用 SSL 连接?

4

14 回答 14

88

SSL 是必须的。

POST 方法并不比 GET 更安全,因为它也可以通过网络未加密发送。

SSL 将覆盖整个 HTTP 通信,并对客户端和服务器之间传输的 HTTP 数据进行加密。

于 2009-06-17T18:06:14.317 回答
42

<shameless plug>我有一篇博客文章详细介绍了 HTTP 请求的外观以及 GET 请求与 POST 请求的比较。为简洁起见,GET:

GET /?page=123 HTTP/1.1 CRLF
Host: jasonmbaker.wordpress.com CRLF
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1 CRLF
Connection: close CRLF

和发布:

POST / HTTP/1.1 CRLF
Host: jasonmbaker.wordpress.com CRLF
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1 CRLF
Connection: close CRLF
CRLF
page=123

(CRLF 只是一个换行符)

如您所见,从如何形成请求的角度来看,唯一的区别*是 POST 请求使用 POST 一词,并且表单数据是在请求正文中发送的,而不是在 URI 中发送的。因此,使用 HTTP POST 是隐蔽的安全性。如果你想保护数据,你应该使用 SSL。

*请注意,还有其他区别

于 2009-06-17T18:23:48.030 回答
8

这取决于您的情况,截获凭证会花费多少人?

如果它只是一个软件问答网站的登录,那么 SSL 可能不是必需的,如果它是一个在线银行网站或您存储信用卡数据,那么它是必要的。
这是一项业务而非技术决策。

于 2009-06-17T18:06:38.263 回答
6

HTTP POST 未加密,它可以被网络嗅探器、代理拦截或在具有自定义日志记录级别的服务器日志中泄露。是的,POST 比 GET 好,因为 POST 数据通常不由代理或服务器记录,但它并不安全。要保护密码或其他机密数据,您必须在 POST 之前使用 SSL 或加密数据。另一种选择是在浏览器中使用摘要式身份验证(请参阅 RFC 2617)。请记住,(本地)加密不足以防止重放攻击,您必须在加密之前连接随机数和其他数据(例如领域)(请参阅 RFC 2617,了解如何在 Digest Auth 中完成)。

于 2009-06-17T18:11:30.627 回答
5

SSL 是必须的:)

HTTP Post 以纯文本形式传输。例如,下载并使用 Fiddler 观察 HTTP 流量。您可以在那里轻松查看整个帖子(或通过 WireShark 之类的网络流量监视器)

于 2009-06-17T18:06:15.283 回答
5

它不安全。可以像 GET 一样轻松地嗅探 POST。

于 2009-06-17T18:06:20.617 回答
2

不...POST 根本不够安全。SSL 是必须的。

POST 仅有效地隐藏查询字符串中的参数。任何查看浏览器和端点之间流量的人仍然可以获取这些参数。

于 2009-06-17T18:06:18.620 回答
2

最安全的方法是根本不发送凭据。

如果您使用Digest Authentication,那么 SSL不是必须的。

(注意:我并不是说基于 HTTP 的摘要式身份验证总是比使用基于 HTTPS 的 POST 更安全)。

于 2009-06-17T18:21:08.957 回答
1

POST 是明文。

安全连接是必须的。

这就是为什么它被称为安全连接。

于 2009-06-17T18:06:50.353 回答
1

单独的 POST 请求并不安全,因为所有数据都以纯文本形式“移动”。

您需要 SSL,以使其安全。

于 2009-06-17T18:07:45.157 回答
1

不,使用 SSL。

使用 POST 时,除非使用 SSL,否则值仍以纯文本形式提交。

于 2009-06-17T18:07:52.737 回答
1

HTTP GET 和 HTTP POST 之间的唯一区别是数据的编码方式。在这两种情况下,它都以纯文本形式发送。

为了为登录凭据提供任何类型的安全性,HTTPS 是必须的。

您也不需要昂贵的证书来提供 HTTPS。有许多提供商会以大约 20 美元的价格颁发非常基本的证书。更昂贵的包括身份验证,这是电子商务网站更关心的问题。

于 2009-06-17T18:08:48.727 回答
1

请看这篇很棒的文章:

防止恶意 POST 请求

https://perishablepress.com/protect-post-requests/

于 2016-07-11T07:48:43.410 回答
0

如果您使用未加密的 HTTP 连接,则 POST 数据以纯文本形式发送。如果这足够安全取决于您的使用情况(提示:不是)。

如果服务器、客户端机器和它们之间的所有机器都是受控的、完全受信任的网络的一部分,那么这可能没问题。

在这些非常有限的情况之外(有时甚至在其中)纯文本身份验证正在自找麻烦。

于 2009-06-17T18:08:26.370 回答