【问题标题】:Yii2 password hashYii2 密码哈希
【发布时间】:2014-12-28 16:11:08
【问题描述】:

我想知道密码哈希是如何产生的?

// This is my code:

$email="mail@example.net";
$password="mypassword";

// How to get password_hash variable?

$user = User::find()->where(['email'=>$email, 'password_hash'=>$password_hash])->one();
if(isset($user)){
   echo "there is";
} else {
 "Sorry!";  
}

谢谢。

【问题讨论】:

  • User::find()->where(['email'=>$email, 'password_hash'=>$password_hash])->one(); 这个习惯并不能通过 sql 注入来保护。我们应该找到模型然后调用 validatePassword 函数来验证用户模型。参考 Phagey 的回答。

标签: yii2 yii2-advanced-app yii2-user


【解决方案1】:

http://www.yiiframework.com/doc-2.0/guide-security-passwords.html 在 Yii 2 中是如何处理密码的。除非你是加密专家,否则不要尝试自己编写。

【讨论】:

    【解决方案2】:
    公共函数验证密码($密码) { if(md5($password) === $this->password) 返回真; 别的 返回错误; //return Yii::$app->security->validatePassword($password, $this->password); } 公共函数 beforeSave($insert) { // 如果设置了哈希新密码 if ($this->newPassword) { //$this->password = Yii::$app->security->generatePasswordHash($this->newPassword); $this->password = md5($this->newPassword); } // 将 ban_time 复选框转换为日期 如果($this->ban_time){ $this->ban_time = date("Y-m-d H:i:s"); } // 确保字段为空,因此它们不会被设置为空字符串 $nullAttributes = ["email", "username", "ban_time", "ban_reason"]; foreach ($nullAttributes as $nullAttribute) { $this->$nullAttribute = $this->$nullAttribute ? $this->$nullAttribute : null; } 返回父级::beforeSave($insert); }

    【讨论】:

    • ^- MD5 是个糟糕的选择。
    【解决方案3】:

    我在 md5 中使用哈希,但我在用户模型中创建函数

        public function validatePassword($password)
    {
        return $this->PASSWORD === md5($password);
    }
    

    【讨论】:

    • md5 非常不安全。我要么使用 PHP 的新内置 password_hash 函数,要么使用 yii\base\Security::generatePasswordHash。
    • 这是答案:$user = User::find()->where(['email'=>$email])->one(); if(!$user){ // Wrong email } elseif (!Yii::$app->security->validatePassword($password, $user->password_hash)) { // Invalid password } else { // Ok }
    • ...请告诉我你不再这样做了。使用内置的加密方法。 MD5 会让你妥协。简单的 MD4/SHA1 哈希不再是一种安全的加密形式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2012-07-07
    • 1970-01-01
    • 2023-04-08
    • 2015-11-30
    • 2018-01-31
    • 2020-04-19
    相关资源
    最近更新 更多