【问题标题】:Enforcing strong passwords in Kohana Auth在 Kohana Auth 中强制使用强密码
【发布时间】:2017-08-01 21:12:45
【问题描述】:

我正在尝试使用 Auth 在我的 Kohana 应用程序中强制使用强密码,方法是使用以下正则表达式要求至少一个大写字母、一个小写字母、一个数字、一个非字母数字(特殊字符),最少 8 个字符。

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$

正则表达式正在运行,如Rubular 所示。这是我在 Kohana 的 Model_Auth_User 中使用的代码,它扩展了 ORM

public function rules() {
    return array(
        'password' => array(
            array('not_empty'),
            array('min_length', array(':value', 8)),
            array('regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
        )
    );
}

但是,在创建新用户帐户或更改现有用户帐户的密码时,此正则表达式似乎完全被忽略了。上面一行中的min_length 工作正常!

它会阻止我使用 test 作为密码,因为它少于 8 个字符,但 testing123 不会给出任何类型的错误消息。

任何想法为什么会发生这种情况以及解决方法?

【问题讨论】:

  • 您将密码存储为哈希?如果我记得 ORM 规则适用于数据库值,而不是 REQUEST 值。
  • @bato3 是的,密码是散列的。不过,密码验证是在加密之前对 POST 值运行的。
  • 我知道这一点。我正在尝试解释为什么 up 代码不起作用。 save 没有额外的验证使用内部值,这是在 set 方法上散列的。因此,您必须使用额外的验证初始化原始 (POST) 值。 kohanaframework.org/3.3/guide-api/Model_Auth_User#filters, #set, #create
  • 我已经更新了我的问题和答案,使其更加清晰。感谢您的宝贵时间。

标签: regex passwords kohana kohana-3.3 kohana-auth


【解决方案1】:

想通了 - 您必须将正则表达式添加到 get_password_validation 函数(在同一模型中),否则它不会输出任何错误消息。

public static function get_password_validation($values) {
    return Validation::factory($values)
        ->rule('password', 'min_length', array(':value', 8))
        ->rule('password', 'regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/'))
        ->rule('password_confirm', 'matches', array(':validation', ':field', 'password'));
}

如果添加,rules() 函数中的正则表达式需要删除,否则无法登录,因为它对不包含任何特殊字符的散列字符串运行正则表达式检查。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2012-10-14
    • 2013-03-12
    • 2017-01-11
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多