[英]Can't login with real password in php
我有一个注册表格和登录表格。 我已经在注册表格中使用了md5加密,并且工作正常。 但是,当我尝试使用(123)之类的真实密码登录时,它并没有登录。另一方面,当我在md字段中复制粘贴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>";
}
}
?>
如前所述:您正在比较POST数组中的纯文本$password = $_POST['pass'];
到表中的MD5。
应该读为$password = md5($_POST['pass']);
我还说过, “永远”都不要接受这个。 如果它是实时站点,建议您暂停使用,直到使用安全的“本世纪”哈希函数为止。
MD5已有30多年的历史,现在不再被认为可以安全地用于哈希/存储密码。
请参阅以下内容:
密码
使用以下之一:
crypt()
bcrypt()
scrypt()
password_hash()
函数。 其他连结:
有关列长的重要旁注:
如果确实要决定使用password_hash()
或crypt,则必须注意,如果当前密码列的长度小于60,则需要将其更改为该长度(或更大)。 手册建议长度为255。
您将需要更改列的长度并以新的哈希值重新开始,以使其生效。 否则,MySQL将静默失败。
您当前的代码也可以进行SQL注入 。 将mysqli
与预处理语句一起使用,或将PDO与预处理语句一起使用 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.