【问题标题】:Best practices for hashing a password without using SSL在不使用 SSL 的情况下散列密码的最佳实践
【发布时间】:2013-02-23 21:56:36
【问题描述】:

我知道这个问题听起来可能已经得到解答,但请继续关注我。我有一个需要用户注册和登录的网站。在这个过程中,让我们注册用户将提供用户名和密码,系统将检查信息,然后 POST 给自己,以便 PHP 脚本进行加盐和哈希存储到数据库之前的密码。

现在我认为这是安全的,加盐和散列密码始终是最佳实践,但最近我想到这是如何发生的,数据必须先发送到服务器,然后才能散列,因为我不使用 SSL 发送的用户名和密码未加密,所以我假设这些信息将以纯文本形式发送是否正确?

如果是这样,这根本不好。所以我能看到的解决这个问题的唯一两种方法是:

  1. 使用 SSL 并保护用户和服务器之间的连接并加密正在发送的数据。

  2. 在信息离开用户之前对信息进行哈希处理,这可以使用 Javascript 完成

我想实现第二个,但我不确定如何执行此操作。对此的最佳做法是什么?

我在想,在发送信息之前,AJAX 脚本会控制数据并检查信息是否是我们正在寻找的内容,然后对信息进行加盐和哈希处理。

我所描述的这个实现是否有任何安全隐患?

感谢您的宝贵时间。

【问题讨论】:

  • 问题是你将散列算法和加盐暴露给客户端,然后攻击者可以弄清楚。我个人会坚持使用 SSL,这是最安全的选择。
  • 有没有办法在使用 javascript 时以某种方式保护它?以这种方式做事总是帮助我提高 JavaScript 技能。
  • 我建议您阅读此页面matasano.com/articles/javascript-cryptography。正如 Lloyd 指出的那样,您的解决方案 2 的问题在于,用于进行加密的 JavaScript 仍然以明文形式发送,如果您可以在 JS 中使用适当的随机数生成器(许多加密算法是免费提供的),那就太好了在没有问题的情况下),但这目前是不可能的。

标签: php javascript passwords security


【解决方案1】:

使用 SSL 并保护用户和服务器之间的连接并加密正在发送的数据。

是的,这样做。

在信息离开用户之前对信息进行哈希处理,这可以使用 Javascript 完成

这不会保护数据。相反,它将有效地将要发送到服务器的秘密数据更改为密码的散列版本。这仍然会以纯文本形式发送,攻击者可以嗅探它并确切知道要发送什么。

【讨论】:

    【解决方案2】:

    您可能对Secure Remote Password protocol 感兴趣。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2012-07-03
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2012-05-04
      相关资源
      最近更新 更多