【发布时间】:2016-12-11 20:02:03
【问题描述】:
我正在尝试将散列密码与用户输入的密码进行比较,但它没有验证并显示密码不正确。我用这段代码来哈希密码:$hashed_password = password_hash($me, PASSWORD_DEFAULT);
下面的代码是登录检查页面
host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbll_name="employees_table"; // Table name
$tb2_name="system_users";
$tb3_name="managers_table";
// Connect to server and select databse.
$link = mysqli_connect("$host", "$username", "$password")or die("cannot connect");
mysqli_select_db($link,"$db_name")or die("cannot select DB");
$myusername=$_POST["myusername"];
$mypassword=$_POST["mypassword"];
// To protect MySQL injection (more detail about MySQL injection )
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysqli_real_escape_string($link, $myusername);
$mypassword = mysqli_real_escape_string($link, $mypassword);
$statues = "active";
// from system table
if ($sql="SELECT * FROM $tb2_name WHERE User_id='".$myusername."' and statues='".$statues."'");
{
$wql="SELECT * FROM $tb2_name WHERE User_id='".$myusername."' ";
$result2 = mysqli_query($link, $wql);
$details = mysqli_fetch_array($result2, MYSQLI_BOTH);
$Name = $details["Company"];
$Surname = $details["First_name"];
$encrypted_password = $details["Password"];
上面的代码从数据库中获取散列函数,下面的代码比较它们。但它显示密码不正确,即使我输入了正确的密码
if (password_verify($mypassword, $encrypted_password))
{
【问题讨论】:
-
你的数据库怎么样,你能向我们展示你的表结构吗?
-
@Jerome 请考虑删除此问题
-
...是的,it's been asked recently 和 answered...
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 不要使用手动转义和字符串插值或连接来完成此操作,因为如果您忘记正确转义某些内容,您将创建严重的SQL injection bugs。stripslashes不应使用,尤其是密码。 -
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代的development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。