Ajax登录:密码加密

我正在使用jQuery Ajax登录用户。 现在,我使用JS从用户名和密码文本框中获取值,并将它们发送到检查凭据的aspx页面。 然后它返回JSON,让用户知道他们是否登录。 一切都很好,但我注意到使用Firebug时密码是以纯文本forms发送的。

加密密码的最佳方法是什么? (顺便说一下,我不在HTTPS服务器上)

Bcrypt可能是你的朋友。 并且在Javascript中还有一个名为jsBCrypt的实现。 我强烈建议您阅读这篇富有洞察力的文章: 以不可破解的forms存储密码 。

但是 :小心! 如果您不使用SSL或服务器提供的nonce ,您可能容易受到中间人攻击。 如果有人读取客户端和服务器之间的(未加密的)流量,他将获得加密密码。 并且只要他想要在不知道真实密码的情况下使用它来对服务器进行身份validation就足够了。

你想使用https。 请注意,即使您这样做,您仍然会在浏览器中看到未加密的值,因为当firebug抓取数据时(无论哪种方式)它还没有加密/解密。

我真的认为咬紧牙关并设置https是可行的方法。 这是经过严格审查的技术。 如果你想自己动手,它就不会安全,你将不得不在客户端和服务器上做很多工作。

为什么不在发送之前使用sha1( http://www.webtoolkit.info/javascript-sha1.html )和散列密码? 您也应该将密码存储在数据库中。 因此,如果您以纯文本格式存储它将是一个很好的做法。

可以通过使用多个工具通过Ajax完成此操作。 我个人这样做是为了登录数据库应用程序。 不幸的是,我不知道实现这一目标的单一解决方案。 最终,最好的解决方案是使用SSL证书。 但是我已经看到过在安装SSL之前需要安全地站起来的时候了。

Bcrypt绝对是在用户数据库中存储密码的更安全的方式,但这适用于后端,而不是Ajax部分。 如果您在客户端/浏览器中使用Bcrypt,则加密的字符串仍然不安全地通过Internet传递。

我最近构建的解决方案在浏览器(在JavaScript中)和服务器(在我的情况下,是一个ASP.NET站点)之间使用RSA加密和AES加密。

流程的工作方式如下:

  • 客户端向服务器请求RSA公钥。
  • 服务器发回RSA公钥并保留RSA私钥。
  • 客户端创建AES密钥并使用RSA公钥对其进行加密。
  • 加密的AES密钥将发送回服务器并保留在内存中。
  • 现在,Ajax消息可以安全地双向传输。
    • 现在,每一方都安全地知道用于加密和解密的AES密钥。

我希望有一个一站式解决方案可以做到这一切,但我现在还没有意识到这一点。

我使用的库是: