检查哈希有效性
Check hash validity
我正在尝试根据数据库中存储的无效散列来验证密码。在这种情况下,我的应用程序没有得到 false
(如我所想),而是死于 Invalid hash
异常。
有没有 Yii2 内置的方法来验证散列,然后再将其提供给 validatePassword
,以更温和地处理这种情况?
或者我剩下的唯一方法是复制 validatePassword
:
使用的代码
if (!preg_match('/^$2[axy]$(\d\d)$[\.\/0-9A-Za-z]{22}/', $hash, $matches) || $matches[1] < 4 || $matches[1] > 30) {
throw new InvalidParamException('Hash is invalid.');
}
到我自己的代码,当散列无效时根本不调用 validatePassword
?
您始终可以在密码验证中使用 try
- catch
块:
/**
* Validates password
*
* @param string $password password to validate
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password)
{
try {
$data = Yii::$app->getSecurity()->validatePassword($password, $this->password_hash);
return $data;
} catch(\yii\base\InvalidParamException $e) {
return false;
}
}
类似的东西,但是如果哈希已经是格式错误的,你为什么还要尝试验证它呢?也许一些罪犯会在那里传递一些不好的东西,可以通过你的登录等。
我正在尝试根据数据库中存储的无效散列来验证密码。在这种情况下,我的应用程序没有得到 false
(如我所想),而是死于 Invalid hash
异常。
有没有 Yii2 内置的方法来验证散列,然后再将其提供给 validatePassword
,以更温和地处理这种情况?
或者我剩下的唯一方法是复制 validatePassword
:
if (!preg_match('/^$2[axy]$(\d\d)$[\.\/0-9A-Za-z]{22}/', $hash, $matches) || $matches[1] < 4 || $matches[1] > 30) {
throw new InvalidParamException('Hash is invalid.');
}
到我自己的代码,当散列无效时根本不调用 validatePassword
?
您始终可以在密码验证中使用 try
- catch
块:
/**
* Validates password
*
* @param string $password password to validate
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password)
{
try {
$data = Yii::$app->getSecurity()->validatePassword($password, $this->password_hash);
return $data;
} catch(\yii\base\InvalidParamException $e) {
return false;
}
}
类似的东西,但是如果哈希已经是格式错误的,你为什么还要尝试验证它呢?也许一些罪犯会在那里传递一些不好的东西,可以通过你的登录等。