【问题标题】:Validate passwords with CakePHP 1.3使用 CakePHP 1.3 验证密码
【发布时间】:2010-06-30 20:22:29
【问题描述】:

如何在 CakePHP 中对密码字段进行验证检查,在我有机会对其进行任何检查之前看到密码已被散列?

【问题讨论】:

  • 我需要对其进行验证 before 它的哈希值。我要检查的主要是它的长度。
  • 我没有使用 cakePHP,但你不能在你的输入上使用相同的散列函数,然后将它与存储的散列密码进行比较吗?

标签: php security cakephp hash passwords


【解决方案1】:

如果您的表单中只有一个 password 字段,您将需要 create a custom hash function ,它要么什么都不做,要么更好地在某处保留原始密码。

很可能您的表单中有两个密码字段,用户需要在其中确认密码。在这种情况下,您对第二个密码字段执行密码验证规则。这可以在自定义验证规则中自动发生,请记住,您可以通过 $this->data 访问验证函数中的所有其他字段。然后您可以确认这两个密码与described here 相同。

【讨论】:

  • 我似乎遇到的问题是密码在进入验证阶段之前已经过哈希处理,因此我运行的验证仅适用于哈希密码。
  • @chustar 这就是您password2字段进行验证的原因,该字段不会自动散列。
  • 这篇博文详细介绍了如何创建自定义哈希函数,如 deceze 所述,以解决此问题:teknoid.wordpress.com/2008/10/08/…(从第二个代码示例开始阅读。)
【解决方案2】:

它对我来说是这样的(在模型中):

  public $validate = array(
        'password' => array(
            'minLength' => array(
                'rule' => array('minLength', '8')
            )
         )
    );

如果您想进行更多验证,请在适当的模型中创建custom validation method。在自定义验证方法中哈希密码这样:Security::hash($this->data['User']['password'], null, true)

【讨论】:

  • 当然可以,因为它总是会在验证之前对密码进行哈希处理,并且哈希值总是超过 8 个字符。这不会强制未散列的密码为 8 个字符或更长。尝试使用一位数字密码测试您的表单 - 它会验证。
  • 实际上,我不得不提一下,我在相同的表单中具有相同的验证规则的 'confirm_password' 字段。我很久以前创建了这个表单,以至于我忘记了我在视图中将其标记为“密码”,而在真实字段“密码”中标记为“确认密码”。所以,当我输入一个字符时,密码验证失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多