使用POST提交登录凭证安全吗?
还是必须使用SSL连接?
使用POST提交登录凭证安全吗?
还是必须使用SSL连接?
SSL是必需的。
POST方法并不比GET更安全,因为它也会以未加密的方式在网络上发送。
SSL将覆盖整个HTTP通信,并加密客户端和服务器之间传输的HTTP数据。
<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请求:
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请求与URI请求的区别在于使用POST单词,并且表单数据是发送到请求正文而非URI中。因此,使用HTTP POST是安全性通过混淆进行保护。如果要保护数据,应该使用SSL。
*
请注意,还有其他差异。
HTTP POST请求并未加密,这意味着它可以被网络抓包工具截获,代理服务器或自定义日志级别的服务器记录泄露。是的,相对于GET请求,POST请求更安全,因为代理服务器或者服务器并不通常记录POST数据,但也不是完全安全的。 如果要保护密码或其他机密数据,必须在进行POST请求之前使用SSL或对数据进行加密。另外一种选择是在浏览器端使用摘要认证(详见RFC 2617)。请记住,(自制的)加密并不足以防止重放攻击,必须在加密前将一个随机数和其他数据(例如领域)连接起来(请参阅RFC 2617了解如何在摘要认证中执行此操作)。
这取决于您的具体情况,攻击者窃取凭据的成本有多高?
如果只是登录到一个软件问答网站,那么可能不需要SSL,但如果是在线银行网站或者您存储信用卡数据,则需要使用SSL。
这是一个业务而非技术决策。
SSL是必须的 :)
HTTP Post以明文形式传输。例如,下载并使用Fiddler观察HTTP流量。你可以轻松地在那里看到整个post(或通过像WireShark这样的网络流量监视器)
这不安全。POST请求和GET请求一样容易被嗅探。
不要使用POST请求,它并不够安全。SSL是必须的。
POST只能有效地隐藏查询字符串中的参数。但这些参数仍然可以被截取浏览器与终点之间的通信流量的任何人获取。