-1
我使用的PDO和登錄腳本不起作用?
主要原因是password_verify
與實際密碼不匹配。使用PDO的登錄腳本有什麼問題?
<?php session_start();
include 'conn.php';
if(isset($_POST) && count($_POST)>0)
{
$user = $_POST['user'];
$pass = $_POST['pass'];
$option=array('cost'=>12);
$hash=password_hash($pass,PASSWORD_BCRYPT,$option);
$secure = password_verify($pass,$hash); // $secure=hash('sha512',$pass);
$query ="SELECT * FROM signup WHERE Username=:users AND Password=:pass";
$result = $conn->prepare($query);
$result->execute(array(':users' => $user,':pass' => $secure));
$res=$result->fetchColumn();
if($res>0)
{
// Set username session variable
$_SESSION['user'] = $user;
// Jump to secured page
header('location:index.php');
}//endif
else
{
header('Location:signin.php');
}
}
?>
如果我使用hash("algo',$var)
那麼腳本去罰款,但使用它是不工作的標準的PHP 5.5的技術。
是的,正確的方法是爲該用戶提取哈希值,並使用password_verify比較$ password和存儲的哈希值......我不完全確定,但比較SQL中的字符串可能容易受到定時攻擊的影響,因爲大多數比較運算符在第一個不匹配的字節後返回false。 –
這是一個有效的觀點,但是您還需要確保始終進行比較,即使用戶名不匹配。定時問題變得非常複雜。 – Halcyon
如果我使用':pass'=> $ hash,那麼它也不適用於我。 – user3574891