我有一个关于在数据库中使用密码进行密码登录的问题.我的当前脚本只是告诉我"密码错误"消息,即使它正确.
$s = $mysqli->query("SELECT * FROM `users` WHERE email`='".$_POST['email']."'") or die();
$i = $s->fetch_assoc();
if($_POST['password'] == sha1($i['password'])) {
echo "works";
} else {
echo "bad password";
}
Run Code Online (Sandbox Code Playgroud)
你这样做是错误的.数据库密码已经过哈希 我希望但是用户输入一个纯文本密码,所以你需要对用户输入的内容进行哈希,看看它是否与数据库中的哈希相匹配
$s = $mysqli->query("SELECT * FROM `users` WHERE `email`='{$_POST['email']}'") or die();
$i = $s->fetch_assoc();
if(sha1($_POST['password']) == $i['password']) {
echo "works";
} else {
echo "bad password";
}
Run Code Online (Sandbox Code Playgroud)
然而
请不要滚动自己的密码哈希.PHP提供
password_hash()并password_verify()请使用它们,我可能希望有一天使用您的网站这里有一些关于密码的好主意 如果您使用的是5.5之前的PHP版本,那么这里有一个兼容包
也
你的脚本存在SQL注入攻击的风险 看看Little Bobby Tables发生的事情即使 你正在逃避输入,它也不安全! 使用预准备语句和参数化语句