我正在使用jQuery Ajax登录用户。现在,我使用JS从用户名和密码文本框中获取值,并将它们发送到检查凭据的aspx页面。然后它返回JSON,让用户知道他们是否登录。一切运作良好,但我注意到使用Firebug时密码是以纯文本形式发送的。
加密密码的最佳方式是什么? (顺便说一句,我不在HTTPS服务器上)
答案 0 :(得分:3)
Bcrypt可能是你的朋友。并且在Javascript中还有一个名为jsBCrypt的实现。我强烈建议您阅读这篇富有洞察力的文章:Storing passwords in uncrackable form。
但是:小心!如果您不使用SSL或提供的服务器nonce,您可能容易受到中间人攻击。如果有人读取客户端和服务器之间的(未加密的)流量,他将获得加密密码。而且只要他不知道真正的密码就可以用它来对服务器进行身份验证。
答案 1 :(得分:2)
您想使用https。请注意,即使你这样做,你仍然会在浏览器中看到未加密的值,因为当firebug抓取数据时(无论哪种方式)它还没有被加密/解密。
我真的认为咬紧牙关并设置https是可行的方法。它是经过严格审查的技术。如果你想自己动手,它就不会安全,你将不得不在客户端和服务器上做很多工作。
答案 2 :(得分:0)
为什么不在发送之前使用sha1(http://www.webtoolkit.info/javascript-sha1.html)和哈希密码? 您应该将密码存储在数据库中。因此,如果您以纯文本格式存储它将是一个很好的做法。
答案 3 :(得分:0)
可以通过使用多个工具通过Ajax完成此操作。我个人这样做是为了登录数据库应用程序。不幸的是,我不知道实现这一目标的单一解决方案。最终,最好的解决方案是使用SSL证书。但是我已经看到过在安装SSL之前需要安全地站起来的时候。
Bcrypt绝对是在用户数据库中存储密码的更安全的方式,但这适用于后端,而不是Ajax部分。如果您在客户端/浏览器中使用Bcrypt,则加密的字符串仍然会通过Internet进行不安全的传递。
我最近构建的解决方案在浏览器(在JavaScript中)和服务器(在我的情况下,是一个ASP.NET站点)之间使用RSA加密和AES加密。
流程的工作原理如下:
我希望有一个一站式的解决方案可以做到这一切,但我现在还没有意识到这一点。
我使用的库是: