我想验证我的数据库中使用password_verify()
函数的哈希密码,但它似乎并没有工作。请任何帮助。password_verify()不验证
<?php
include("config.php");
include("vendor/password.php");
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string($db , $_POST['umail']);
$password = mysqli_real_escape_string($db , $_POST['upassword']);
$userQuery = "SELECT username, password FROM users WHERE username = '$username' AND password='$password'";
$result = mysqli_query($db ,$userQuery);
$queryRow = mysqli_fetch_array($result , MYSQLI_ASSOC);
$queryCount = mysqli_num_rows($result);
$verifyPassowrd = password_verify($_POST['upassword'] , $queryRow[2]);
if ($verifyPassowrd){
header("Location:home.php");
}else{
echo "Username Or Password is invalid";
}
mysqli_close($db);
}
?>
确保你***不要逃避密码](http://stackoverflow.com/q/36628418/1011527)** *或在哈希之前使用其他任何清理机制。这样做*更改密码并导致不必要的附加编码。 –
[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can- ***)了解[MySQLi](http://php.net/manual)[准备](http://en.wikipedia.org/wiki/Prepared_statement)声明/en/mysqli.quickstart.prepared-statements.php)。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不信?](http://stackoverflow.com/q/38297105/1011527) –
'password_hash()'函数可以生成一些非常冗长的文本(当前的默认值是60个字符),因此使数据库现在尽可能大的场地将允许所需的长度。其次,PHP团队正在向该方法添加更多算法,这意味着哈希可以并将会增长。我们也不想限制用户使用他们选择的密码或密码的能力。最好为变化留出空间。 –