POST是否足够安全以发送登录凭据?
或者是必须的SSL连接?
答案 0 :(得分:74)
SSL是必须的。 POST不比GET更安全,因为它也发送未加密。 SSL将覆盖整个HTTP通信并加密客户端和服务器之间的HTTP数据发送。
答案 1 :(得分:40)
<shameless plug>
我有一个blog post,详细说明了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:
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。
答案 2 :(得分:8)
这取决于你的情况,截取证书需要花多少钱呢?
如果只是登录软件Q + A网站,则可能没有必要使用SSL,如果是在线银行网站,或者存储信用卡数据,那么它就是。
这是一项业务而非技术决策。
答案 3 :(得分:6)
HTTP POST未加密,可以被网络嗅探器拦截,也可以被代理拦截,或者泄露在具有自定义日志记录级别的服务器日志中。是的,POST比GET更好,因为POST数据不是由代理或服务器 usualy 记录的,但它不是 secure 。 要保护密码或其他机密数据,您必须在POST之前使用SSL或加密数据。另一种选择是在浏览器中使用摘要式身份验证(请参阅RFC 2617)。请记住,(本地增加的)加密不足以防止重放攻击,您必须在加密之前连接一个随机数和其他数据(例如,领域)(参见RFC 2617,了解如何在摘要验证中完成)。
答案 4 :(得分:5)
SSL必须:)
HTTP Post以纯文本格式传输。例如,下载并使用Fiddler来监视HTTP流量。您可以轻松地在那里(或通过像WireShark这样的网络流量监控器)查看整个帖子
答案 5 :(得分:4)
不安全。 POST可以像GET一样轻松嗅探。
答案 6 :(得分:2)
不...... POST根本不够安全。 SSL是必须的。
POST仅有效地隐藏查询字符串中的参数。任何查看浏览器和终点之间流量的人都可以选择这些参数。
答案 7 :(得分:2)
最安全的方法是根本不发送凭据。
如果您使用Digest Authentication,那么SSL必须 NOT 。
(注意:我并不是说通过HTTP进行摘要式身份验证总是比通过HTTPS使用POST更安全。)
答案 8 :(得分:1)
POST是纯文本。
必须建立安全连接。
这就是为什么它被称为安全连接。
答案 9 :(得分:1)
不,请使用SSL。
使用POST时,除非使用SSL,否则仍会以纯文本形式提交值。
答案 10 :(得分:1)
HTTP GET和HTTP POST之间的唯一区别是数据编码的方式。在这两种情况下,它都以纯文本形式发送。
为了为登录凭据提供任何类型的安全性,必须使用HTTPS。
您也不需要昂贵的证书来提供HTTPS。有许多提供商将以约20美元的价格发行非常基本的证书。更昂贵的包括身份验证,这对电子商务网站来说更为重要。
答案 11 :(得分:0)
单独的POST请求不安全,因为所有数据都以纯文本“旅行”。
您需要SSL才能确保安全。
答案 12 :(得分:0)
如果使用未加密的HTTP连接,POST数据将以纯文本格式发送。 如果这足够安全取决于您的使用(提示:它不是)。
如果服务器,客户端计算机和它们之间的所有机器都是受控的,完全受信任的网络的一部分,这可能没问题。
在这些非常有限的情况之外(有时甚至在其中),纯文本身份验证会遇到麻烦。
答案 13 :(得分:0)