CakePHP 2 Hashing随时间变化?

时间:2012-12-12 21:35:23

标签: cakephp authentication hash

我正在制作一个CakePHP 2.2.3应用程序,它需要依赖另一个现有的应用程序来获取其登录信息。用户名/密码组合存在于另一个数据库/服务器上,我已经设置了我的CakePHP应用程序,以便在他们第一次登录我的界面时创建新用户。这是过程:

  1. 用户首次登录,提供用户名&密码。 CakePHP用户记录尚不存在
  2. 系统检查另一方是否存在具有相同(已消毒)用户名的用户
  3. 如果用户确实存在,那么我们会获取密码并比较密码以查看它们是否匹配。
  4. 如果密码匹配,则散列所提供的内容并保存用户记录
  5. 登录新创建的用户
  6. 这为我们解决了一些问题,主要是让用户有多个位置登录以执行某些操作。

    我的问题似乎是CakePHP在哈希密码时得到的值似乎随着时间的推移而变化。因此,不是用密码登录用户,而是每天登录时都会创建一个新的用户记录。我遇到了一个问题,我昨天无法使用特定用户登录...所以我检查了一下login()动作看作密码的哈希值。

    特定用户的密码是“道路”

    昨天,哈希是: 988042d7f4e62760238d895472ecaf1844094f9f

    今天,当我走路时,我得到: a8318e7bbe8ee5efc59f53b4ede4d80dc0495c6d

    我真的不知道从哪里开始寻找为什么会发生这种情况。为了让我的开发向前发展,我所能做的就是更改我想要登录的用户记录的密码的哈希值。这是我要做的第二天。有没有什么我可以在config / core.php中使用Security哈希值或salt值做错了?

    我很乐意:

    1. 找出哈希变化的原因
    2. 更改Auth组件以使用其他数据库在
    3. 中记录用户

      但我不知道从哪一个

      开始

2 个答案:

答案 0 :(得分:1)

我不知道问题是什么,但我可以告诉你在哪里看。 CakePHP中的AuthComponent使用Security类进行密码散列。

public static function password($password) {
    return Security::hash($password, null, true);
}

这告诉Security类使用默认算法散列您的密码并使用Security.salt中配置的salt。如果在任一应用程序中Security.salt的值不同,则哈希将不匹配。

第二种可能性是,在创建用户记录时,您没有使用与AuthComponent相同的Security :: hash设置。检查您没有指定其他算法或提供盐。

第三种可能性是一个应用程序缺少散列算法。例如,如果sha1在登录应用程序上可用,但在数据库应用程序上不可用,则哈希值将不匹配。数据库应用程序将回退到sha256,登录应用程序将使用sha1。

答案 1 :(得分:0)

如果你在crud风格的更新功能中执行某些杂技,就会发生这种情况。基本上,可能发生的是您将密码保存两次。您可能在模型中有一些代码,如:

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

作为安全预防措施,保证附加到模型的任何密码数据在发送到数据库之前都会进行哈希处理。但是,如果您在更新函数中调用类似$ this-> MyModel-> read(null,$ someId)的内容,则您将在模型上设置整个记录的数据 - 包括之前的哈希密码 - 并且您的代码将尽职尽责地将其哈希,这显然不是您想要的。所以,是的,在这种情况下你会得到哈希漂移。