我有一份注册表格和登录表格。我在我的注册表单中使用了md5加密,它工作正常。但是,当我尝试使用真实密码(如123)登录时,它并没有登录我。另一方面,当我在密码字段中复制粘贴md5加密时,它就会登录我。请帮我解决这个问题!谢谢!
这是我的编码:
<?php
if (isset($_POST['submit'])) {
$user_name = $_POST['username'];
$user_email = $_POST['email'];
$user_pass = $_POST['password'];
$query = "SELECT * FROM users where Email = '" . $_POST["email"] . "'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) == 0) {
$query = "INSERT INTO users (Name,Email,Pass) VALUES ('$user_name','$user_email', md5('$user_pass'))";
$result = $obj->run_query($query);
echo "<script>alert('You have successfully Registered!')</script>";
echo "<script>window.open('welcome.php','_self')</script>";
} else {
echo "<script>alert('This user email $user_email is already exist!')</script>";
}
}
// login script
if (isset($_POST['login'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['pass'];
$query = "SELECT * FROM users WHERE Email = '$email' AND Pass = '$password'";
$result = $obj->run_query($query);
if ($count = mysqli_num_rows($result) > 0) {
$_SESSION['email'] = $email;
$_SESSION['name'] = $name;
echo "<script>window.open('welcome.php','_self')</script>";
}
else
{
echo "<script>alert('Your email or password is incorrect!')</script>";
}
}
?>
答案 0 :(得分:3)
如前所述:您要将POST数组$password = $_POST['pass'];
中的纯文本与表格中的MD5进行比较。
那应该是$password = md5($_POST['pass']);
我还说过你不应该使用 “ever” 。如果它是一个现场网站,我建议你暂停,直到你使用“本世纪”的安全散列函数。
MD5已有30多年历史,现在不再被认为可以安全地使用哈希/存储密码。
请参阅以下内容:
<强>密码强>
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
关于列长的重要说明:
如果您决定使用password_hash()
或隐藏,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。
您现在的代码也向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements。