我所知道的一家公司正在讨论如何在其所有Web应用程序产品中确定其密码安全策略.
现在,他们通过HTTP在POST表单中发送用户名/密码身份验证,因此,他们正在发送纯文本.
解决这个问题最简单的方法就是要求HTTPS在所有应用程序中登录,对吧?
好吧,有一些内部讨论,而不是做一些自己的客户端密码加密(密码+盐等).
是否有可接受的仅HTTP解决方案?
意见就像......好吧,每个人都有意见,所以我正在寻找可以支持你的建议的可靠安全文献.不要只是google并将我发送到博客文章......我已经做到了这一点.
我找到了OWASP的建议:http: //www.owasp.org/index.php/Top_10_2007-A7#Protection
以及微软的:http: //msdn.microsoft.com/en-us/library/aa302420.aspx
编辑:提供使用SSL的建议是不够的.我需要某种支持文档.我知道滚动我们自己的客户端加密是不好的.我需要能够可靠地将其出售给同事和管理层.
此外,还提到了HTTP Digest.看起来不错,但Digest仅用于HTTP身份验证,而不适用于通过POST发送的数据.
我强烈建议您不要使用自己的解决方案(在安全敏感的环境中).使用SSL.它是一种经过验证的技术,易于实施.
滚动您自己的安全解决方案可能非常危险,即使它正确实施(0.000001%几率),也会很昂贵.
如果数据本身不是太敏感,但密码是,我建议使用HTTP摘要身份验证(这与HTTP基本身份验证完全不同).它比直接HTTP更安全,并且在服务器上实现起来并不困难.没有任何内容通过网络发送,可以揭示密码是什么,只是允许客户端向服务器证明他们有正确密码的信息.
如果您想要在应用程序中如何实现HTTP摘要身份验证,Paul James有一篇很好的文章.
HTTP身份验证的唯一真正问题在于浏览器本身:UI很糟糕,但可以通过一些Javascript来克服.
您可以通过存储A1哈希来安全地存储密码.
更新:正如其他答案所述,虽然服务器可以通过不接受基本身份验证来避免MITM攻击,但客户端仍然容易受到攻击,因为它会.
更新:您无法通过POST保护数据,除非您(a)在客户端上使用JavaScript进行加密,或者(b)通过SSL执行所有操作.
您可以通过一些魔术将HTTP身份验证与表单一起使用.毕竟,我上面链接的文章称为"带有HTML表单的HTTP Auth".但这不会通过POST完成.
如果你真的需要它,请使用POST,使用SSL并在数据库中加密密码.
如果你想避免使用CSRF,我建议使用formkeys,虽然这个想法有很多不同的名字,但是几年前我从黑客Slashcode中获取了这个名字供我自己使用,这是我第一次遇到它的地方.