使用MD5进行用户身份验证

时间:2018-10-15 11:51:53

标签: php

当我能够使用MD5哈希用户密码时,我正在构建一个应用程序。对于插入,它可以正常工作,但是当我进行身份验证时,它告诉我密码错误

require_once('connect.php');
$data = json_decode(file_get_contents("php://input"));
$email = ($data->email);
$password = ($data->password);

$row = $conn->query("
    SELECT * 
    FROM user 
    WHERE email='".$email."' 
        AND password='".md5.$password."'
");
$row->setFetchMode(PDO::FETCH_ASSOC);

$userdetails = $row->fetchAll();
$user = $row->rowCount();

$error_message=array("message"=>("wrong"));

if ($user == 0) {
    echo json_encode($error_message);
} else {
    session_start();
    $_SESSION['user']=$userdetails;
    echo json_encode($userdetails);
}

3 个答案:

答案 0 :(得分:4)

更改

$row = $conn->query("SELECT * from user where email='".$email."' and password='".md5.$password."'");

$row = $conn->query("SELECT * from user where email='".$email."' and password='".md5($password)."'");

注意:您应该使用准备好的语句,也不要使用md5()password_hash()password_verify()

然后将在您的注册页面中。

$hash = password_hash($password,password_default);  // store this hash

然后进入您的登录页面。

$stmt = $conn->query("SELECT * from user where email= ? ");
$stmt->execute(array($email));

$row = $stmt->fetch();

if(password_verify($password,$row['passwordFromDB'])){

    session_start();
    $_SESSION['user']=$userdetails;
    //return what needs to be returned
}else{
    $error_message=array("message"=>("wrong"));
    echo json_encode($error_message);
}

注意:确保您的数据库列的长度为60 +

答案 1 :(得分:1)

由于多种原因,您的代码不安全:

在您的pdo实例中使用准备好的语句

代替使用pdo的查询功能,而使用prepare PDO::prepare,这将使SQL注入风险更加平坦(尽管仍然可能)。

请勿将md5用作哈希算法

MD5不再安全,请使用PHP提供的标准password_hash / password_verify函数。 password_hash()

顺便说一句,您的错误出在查询中

$row = $conn->query("SELECT * from user where email='".$email."'
and password='".md5.$password."'");

它是md5($ password)而不是md5。$ password

答案 2 :(得分:0)

我想你的意思是

$conn->query("SELECT * from user where email='".$email."' and password='".md5($password)."'");

键入md5.$password可能会评估为字符串md5,后跟输入的密码。根据您的PHP设置,它也可能会发出警告。