【问题标题】:Is this acceptable for passing a password?这对于传递密码是否可以接受?
【发布时间】:2009-06-17 18:26:44
【问题描述】:

我有一个网站,要求用户使用用户名和密码进行身份验证。我想使用 SSL,但我没有 SSL 证书。但我会做一些我认为还可以的事情。

我的网站主要基于 AJAX 并且 需要 JavaScript,否则将无法正常工作。

当用户尝试登录时,我使用 AJAX 查询数据库以查找该用户名的盐,如果没有找到随机盐(以防止人们知道是否存在具有该用户名的用户或不)。然后,使用 JavaScript 的 MD5 函数,我在客户端对密码进行 4K 次散列和加盐(就像 Linux 使用 MD5 进行密码散列时所做的那样)客户端,然后我将该散列以纯文本形式传递给服务器。然后,这个哈希值会再被哈希几次,并与数据库中的内容进行检查。

这安全吗?如果没有,我怎样才能在不花钱购买大部分内部网站的 SSL 证书的情况下保护它?

【问题讨论】:

  • 为什么不创建 SSL 证书?由 VeriSign 签名可能很昂贵,但只有一个应该不是问题。
  • 所以...您希望给您的用户一种虚假的安全感?
  • GoDaddy SSL 证书每年低至 12.95 美元。 SSL,而不是本土的身份验证方案,是这里的方式。
  • 这里的每个人到底有什么问题,他们觉得有必要大肆侮辱,而不是仅仅为人们指明正确的方向?我的天。
  • @Beska,或者遇到Rich B,他总是这样。

标签: ssl md5 security


【解决方案1】:

没有。它不安全。中间人可以窥探哈希值并将其呈现给您,从而错误地验证自己。

要对某人进行身份验证,您必须证明他们知道某个秘密。通过未加密通道传递的任何内容都不是秘密。

使用 SSL。您可以获得free that are accepted by Firefox, 的证书,并且可以向 IE 用户提供有关将新 CA 添加到其受信任根的说明。 Certificates that are accepted by all browsers 开箱即用很便宜,我想每年 30 美元。

【讨论】:

  • 那么解决方案是什么,一个随机数?
  • 您可以在每个请求上使用密码和 MAC 来设计一个解决方案,但它会充满您不知道的漏洞。而且,实施起来比购买证书要贵得多。
【解决方案2】:

最好的选择是:

  • 使用由StartCom 签名的证书(免费)。最新版本的 Firefox 和 Safari 支持本机。使用 IE 的用户可以将 CA 添加到其受信任的根列表中。
  • 使用自签名证书并将其分发给您的用户以添加到他们的浏览器中。

正如其他人所说,您的解决方案并不安全。与以明文形式向服务器发送密码相比,它没有任何改进。主要原因:

  • 从客户端以明文形式发送并直接用于身份验证的任何内容都容易受到中间人攻击和窃听攻击。在您建议的解决方案中,如果您知道散列密码,则可以登录。将密码作为散列发送没有任何区别。
  • 认证后,数据仍然是明文发送的,很容易被嗅探到。
  • MD5 is full of holes

【讨论】:

  • MD5 漏洞百出?你能解释一下吗?
  • @Malfist:在我的声明中添加了一个链接:该论文描述了如何使用 MD5 漏洞利用来创建流氓 CA。
【解决方案3】:

您可以免费制作自己的 SSL 证书,一般用户不会信任它,但您可以信任它。

通过使用 JavaScript 和未加密的传输层,您可能会发现有人获取您发送到服务器的哈希值,更不用说给出您如何对密码/用户名进行哈希处理的确切蓝图了。

这实际上取决于该应用程序的安全性有多重要。如果非常重要,请放弃 Ajax,并选择 SSL 证书并使用 HTTPS 层。

【讨论】:

  • 如果它是一个内部站点,自签名可能是要走的路——在内部设置您自己的 CA 并为自己颁发您需要的所有证书。您只需要在所有客户端计算机中安装受信任的根证书 - 此后颁发的任何证书都将受到这些客户端的信任。如果您需要将其作为外部站点,请花额外的钱并获得真正的证书。
【解决方案4】:

您的解决方案对重放攻击持开放态度。在浏览器和网络服务器之间直接尝试Digest Authentication (RFC 2617)。

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 2020-04-08
    • 2013-12-13
    • 1970-01-01
    • 2011-04-17
    • 2015-03-20
    • 2010-11-16
    • 2010-10-04
    相关资源
    最近更新 更多