在PHP中使用密码验证

在PHP中使用密码验证,php,Php,我正在为iOS应用程序开发登录系统 这是我用来向应用程序发送JSON响应的PHP脚本的一部分: if(isset($_POST['correo']) && isset($_POST['pass']) && $_POST['key'] == "123456") { $password = $_POST['pass']; $q = mysqli_query($mysqli,"SELECT * FROM users WHERE email =

我正在为iOS应用程序开发登录系统

这是我用来向应用程序发送JSON响应的PHP脚本的一部分:

if(isset($_POST['correo']) && isset($_POST['pass']) && $_POST['key'] == "123456")
{


    $password = $_POST['pass'];



    $q = mysqli_query($mysqli,"SELECT * FROM users WHERE email = '".$_POST['correo']."' AND 
    encrypted_password = '".$_POST['pass']."'") or die (mysqli_error());

    if(mysqli_num_rows($q) >= 1){
        $r = mysqli_fetch_array($q);

// this is the hash of the password in above example
            $hash = $r['encrypted_password'];

            if (password_verify($password, $hash)) {

                $results = Array("error" => "1","mensaje" => "su ID es ".$r['id'],"nombre" => $r['nombre'],"apellidos" => $r['apellidos'],"email" => $r['email'],
        "imagen" => $r['imagen'],"unidad" => $r['unidad']);

            } else {
                $results = Array("error" => "2","mensaje" => " acceso denegado ");
            }

    }else{
        $results = Array("error" => "3","mensaje" => "no existe");
    }

}

echo json_encode($results);
我的问题是关于在PHP中使用密码验证。 我想知道它是否应该像脚本中那样工作,那么应用程序中不会收到JSON响应


谢谢

您不需要在
WHERE
条件中匹配
密码
,例如:

$q = mysqli_query($mysqli,"SELECT * FROM users WHERE email = '".$_POST['correo']."'") or die (mysqli_error());

        if(mysqli_num_rows($q) >= 1){
                $r = mysqli_fetch_array($q);



                // this is the hash of the password in above example
                $hash = $r['encrypted_password'];

                //you need to match the password from form post against password from DB using password_hash    

                if (password_verify($password, $hash)) {

要防止SQL注入,请使用参数化查询ref:

您的mysqli\u查询将始终返回空结果,因为您将未加密的值传递给查询,并试图使其等于加密的
加密的\u密码='”。$\u POST['pass']
请参数化您的查询。您最初是如何存储用户密码的?
加密的
!=
hahsed
(它应该是散列的)。@diavolic,您是对的,这就是问题所在,我已经从查询中删除了加密的_password='.$\u POST['pass'],它可以工作。@prakashtank WAT。。。这里是SQL注入,
WHERE email=''.$\u POST['correo'].'''.'