我想创建一个功能,如果帐户有多次强力尝试,它会提醒用户。如果字符串匹配超过75%,该函数将提醒用户。我执行了这个:
function Password_Match ($String, $Stored_Password){
$New_String = str_split($String);
$New_Stored_Password = str_split($Stored_Password);
$Match = 0;
foreach ($New_String AS $Value){
if (in_array($Value,$New_Stored_Password)){
$Match++;
}
}
return $Match;
}
$String = "Test";
$Pass = "Tesst";
echo Password_Match($String,$Pass);
这会返回4,但我的代码中显然存在一个缺陷,我无法找到解决方案。承诺将是辉煌的。
答案 0 :(得分:6)
你不应该首先这样做。
应该通过对失败的尝试施加每小时/每日限制来防止暴力攻击。用户如何关心黑客猜测密码的接近程度?
此外,更重要的是,您不应该首先以明文形式存储用户密码。通过告诉用户破解尝试,这是一个比你可以弥补的更严重的安全问题。
有关如何正确存储密码的一些深入讨论,请参阅以下问题:
答案 1 :(得分:1)
您尝试做的是在两个字符串之间衡量edit distance
。 PHP有一个内置函数来实现这一目标。
int levenshtein ( string $str1 , string $str2 )
总结答案
$x = levenshtein ($str1 ,$str2);
$ratio = $x / strlen($str1); //or 2
if ($ratio > 0.75) { //case match }
else { //case miss match}
答案 2 :(得分:0)
密码应使用单向加密进行加密,不应将其作为纯文本存储在数据库中。但如果你真的想要这样做的话......尝试这样的事情:
function Password_Match ($String, $Stored_Password){
similar_text($String,$Stored_Password,$Percentage);
if ($Percentage > 75){
return true;
}
return false;
}