【发布时间】:2019-05-18 11:12:57
【问题描述】:
我已经尝试解决这个问题大约 2 个月,但似乎无法解决。我有一个返回散列密码的数据库。由于打印出所有信息,我可以确认这是有效的。它可以很好地返回非散列和散列密码,但是当它检查密码时,它总是返回 false。
我不知道该怎么做。这可能很容易,但我似乎无法找到它。
<?php
session_start();
$dbip = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "projectNitro";
$conn = new mysqli($dbip, $dbuser, $dbpass, $dbname);
if($conn->connect_error) {
echo("Connection failed: " . $conn->connect_error);
}
$password = mysqli_real_escape_string($conn, $_GET["pass"]);
$email = mysqli_real_escape_string($conn, $_GET["email"]);
$sql = "SELECT * FROM users WHERE email='{$email}' LIMIT 1";
$query = mysqli_query($conn, $sql);
$pass = $_GET["pass"];
if($query == TRUE) {
$row = mysqli_fetch_array($query);
$db_password = $row['password'];
$db_usertype = $row['accountType'];
$username = $row['username'];
echo $password;
echo "<br>";
echo $db_password;
echo "<br>";
$verify = password_verify($pass, $db_password);
if($verify) {
$_SESSION['username'] = $username;
$_SESSION['at'] = $db_usertype;
header("Location: http://website.com");
} else {
echo("DB Email: "
.$row["email"]
."<br>Username: "
.$row["username"]
."<br>DB Password: "
.$row["password"]
."<br>AccountType: "
.$row["accountType"]
."<br>Inserted Email: "
.$_GET["email"]
."<br>Inserted Password: "
.$_GET["pass"]."<br>");
if(password_verify($_GET["pass"], $row["password"])) {
echo("epic<br>");
} else {
echo("not epic<br>");
}
}
} else {
header("Location: http://website.com");
}
$conn->close();
?>
【问题讨论】:
-
缩进。您认为将用户密码作为 URL 的一部分进行设计是一种好的设计吗?
-
@miken32 我目前正在使用 get 以确保系统能够正常工作,然后将切换到 post。
-
以你想要完成的方式开始。如果您希望任何人查看它,您需要正确格式化您的代码。我还建议添加存储哈希的代码,并确保您清除数据库以进行测试。
标签: php passwords password-protection password-encryption password-hash