password_verify函数在此SQL查询中是否可以正常工作?

问题描述 投票:-1回答:1

因此,我正在一个项目中,我必须在其中修复现有代码中的漏洞。在修复这些问题的过程中,我需要从[

更改底部代码中的SQL查询。
$query="SELECT COUNT(userID) as count,userID FROM user WHERE Email='$email' AND password='".md5($password)."' ";

to

$query="SELECT COUNT(userID) as count,userID FROM user WHERE Email='$email' AND password_verify($password, password)=1";

因为本来我应该切换到比MD5更安全的算法,并且该算法也使用盐,所以BCRYPT会选中这两个框。我对SQL还是很陌生,处于一个无法实际测试此代码的独特位置,因为password_hash和password_verify函数仅在PHP 5.5和更高版本中使用,并且此项目正在运行的WAMPserver版本上运行只能使用较旧的版本,因此我只需要知道这些代码在理论上是否可以工作,因为我无法对其进行测试。我将查询中的md5函数替换为password_verify函数,该函数应确定password参数是否为数据库中存储的密码的原始版本。但是我不知道是否需要使用转义字符或函数附近的内容,或者在该查询中是否可以正常使用。

function login_check($email, $password){
   $email=mysql_real_escape_string($email);
   $query="SELECT COUNT(userID) as count,userID FROM user WHERE Email='$email' AND password_verify($password, password)=1";
   $result= mysql_query($query) or die($query."<br/><br/>".mysql_error());
   return (mysql_result($result,0)==1) ? mysql_result($result,0,'userID') : false;
}
php mysql md5 bcrypt password-hash
1个回答
0
投票

您无法从MySQL调用PHP函数。您需要获取密码并在PHP中调用password_verify()

function login_check($email, $password) {
    $email = mysql_real_escape_string($email);
    $query="SELECT userID, password FROM user WHERE Email='$email'";
    $result= mysql_query($query) or die($query."<br/><br/>".mysql_error());
    $count = 0;
    while($row = mysql_fetch_assoc($result)) {
        if (password_verify($password, $row['password'])) {
            $count++;
            $userid = $row['userID'];
        }
    }
    if ($count == 1) {
        return $userid;
    } else {
        return false;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.