【问题标题】:Show password before hashing在散列之前显示密码
【发布时间】:2014-08-07 20:39:09
【问题描述】:

我正在用 cakePHP 编写这段代码,并且我已经让身份验证工作得很好。问题是,当我显示用户信息时,显示的密码是散列密码,这是没用的。有没有办法恢复河豚散列器所做的散列,以便我可以看到实际密码?

我正在使用 cakePHP 2.5,我在保存之前对密码进行哈希处理的函数在我的模型中如下所示:

public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $passwordHasher = new BlowfishPasswordHasher();
            $this->data[$this->alias]['password'] = $passwordHasher->hash(
            $this->data[$this->alias]['password']
            );
        }
        return true;
    }

这是我在用户/索引视图中得到的示例:

Id 5     
Name javier  
Password $2a$10$Awk8LMePPqiEPpavKk6xrulZKrbhNy5NVfkQSDF1E.PmgFtwYy60u   

提前致谢:)

【问题讨论】:

  • 那么,为什么不在将密码传递给模型和 beforeSave() 之前获取密码呢?之前,它不会被修改/散列。
  • 如果您在对密码进行哈希处理时需要将其显示给用户,请在对其进行哈希处理并使用之前将其设置为视图变量。散列后,没有理由需要向用户显示他们的密码,这是正确的 - 永远不会。如果您相信自己这样做,则需要重新考虑安全系统的工作方式。一旦密码被散列,它应该永远保持这种状态。
  • Scowler 是对的,如果你展示它,SSL 就被打败了。它的目的是因为它是一种单向加密方案,现在已经公开了一个纯文本密码。 Plus 散列用于身份验证,而不是加密,因此没有理由找出纯文本版本。
  • 是的,对不起,我很愚蠢,感谢您的回答,我所要做的就是实施重置密码选项。

标签: php cakephp hash passwords blowfish


【解决方案1】:

您知道为什么要对密码进行哈希处理吗?这被认为是一种安全措施,如果您以明文形式保存或显示它们除了散列之外,散列变得毫无意义,那么您根本不必散列它们。在有人以某种方式访问​​数据库或数据的情况下,它们被散列,而不知道盐,尝试解密密码将毫无意义。

即使通过电子邮件发送纯文本密码也被认为是不好的做法,因为大多数人不使用加密连接到他们的邮箱,如果有人可以访问邮箱,所有的密码就在那里等着攻击者。

发送一个仅在有限时间内有效的令牌,并且只允许用户在您的网站上更改他们的密码,不要到处发送纯文本密码。并使用 SSL 进行登录和密码相关操作。

如果您需要告诉用户他们的密码,请为管理员实施一种重置方法,该方法将为用户触发密码重置或允许管理员输入密码,然后进行哈希处理。

【讨论】:

  • 哦,是的,你是对的我不知道为什么我如此痴迷于显示当前密码,而我所要做的就是添加一个重置密码选项。对不起,我问了这么愚蠢的问题,谢谢你的时间:)
  • 散列是故意的一种方式,所以无论如何你都不能恢复散列。这是为了确保即使有人拥有散列密码和盐,他们仍然无法轻易找出密码(尽管这确实使他们更接近于找出密码。)加密不同于散列,因为加密可以通过解密撤消。
猜你喜欢
  • 2011-05-03
  • 2018-03-26
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多