5

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

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

4

4 回答 4

3

Bcrypt可能是你的朋友。Javascript 中还有一个名为jsBCrypt的实现。我强烈建议阅读这篇有见地的文章:以不可破解的形式存储密码

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

于 2011-07-19T13:52:03.123 回答
2

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

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

于 2011-06-07T18:07:55.670 回答
1

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

于 2011-06-07T18:42:56.793 回答
0

可以通过 Ajax 使用多种工具来实现这一点。我亲自为数据库应用程序的登录完成了此操作。不幸的是,我不知道实现这一点的单一解决方案。最终,最好的解决方案是使用 SSL 证书。但我曾见过你需要在安装 SSL 之前安全地启动应用程序的时候。

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

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

流程是这样的:

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

我希望有一个一站式的解决方案来完成所有这些,但我现在不知道有一个。

我使用的库是:

于 2014-09-04T20:51:07.653 回答