具有旧密码验证的顺序(连续)新密码


Sequential (consecutive) new password with old password validation

当我想更改新密码时,如何验证顺序字符串/int?例如:

old pass: mypassword1
new pass: mypassword2

那么它会返回false,但如果它像这个

old pass: mypassword1
new pass: mypassword3

那么它将返回true。

我只为新密码尝试了regEx方法。

提前谢谢。

试试这个:

<?php
$oldpass = 'mypassword1';
$newpass = 'mypassword2';
preg_match('/^([^'d]+)(['d]*?)$/', $oldpass, $match);
$string = $match[1];
$number = $match[2] + 1;
$string .= $number;
$valid = $newpass === $string ? false : true;
var_dump($valid);
?>

由于您处理的是密码,因此不应该与以前的密码进行比较(应该对其进行安全哈希处理,因此不可逆)。PHP在文档中有一些关于这个主题的优秀阅读材料。

作为替代方案,您可以生成已知会违反验证规则的密码变体,然后查看这些变体是否匹配。

假设您正在使用密码功能:

$hash = password_hash($password, PASSWORD_DEFAULT);
// AND....
password_verify($password, $hash);

变体可能看起来像:

$pwd = 'word1';
$num = substr($pwd,-1);
$invalid = false;
$phrase = substr($pwd, 0, -1);
foreach([$num++, $num--] as $variation) {
    if(password_verify($phrase.$variation, $hash)) {
        // password matches, the user is just incrementing the digit.
        $invalid = true;
    }
}

因此,如果$invalid为true,则密码会破坏您的验证规则。

这不是一个愚蠢的方法。它只与您生成无效密码变体的能力一样好。