所以,这是我的代码:
$login_user_name = $_POST['login-user-name'];
//salt is declared earlier
$login_user_pword = super_encrypt($_POST['login-user-pword'], $login_salt);
$login_veri_query = mysql_query("SELECT * FROM zebra_users WHERE username='".$login_user_name."'");
$login_veri_numrows = mysql_num_rows($login_veri_query);
if ($login_veri_numrows != 0) {
while ($value = mysql_fetch_array($login_veri_query)) {
if ($value['password'] == $login_user_pword) {
$login_error .= '<p class="success">Logged in Successfully!</p><br/>';
$main_error .= '<p class="success">Logged in Successfully!</p><br/>';
$login_good = true;
$login_error .= '<script type="text/javascript"> <!-- window.location = "main.php" //--> </script>';
} else {
$login_error .= '<p class="warning">Incorrect password, try again.</p><br>';
}
}
}
}
如果用户的用户名为'user',密码为'pword',并且这些凭据已输入到表单中,则“验证”方法会声明密码不正确。
这里有什么问题?
此外,我知道这不是一个很好的登录风格,但我使用它作为占位符,直到我使用cookie,我不
答案 0 :(得分:1)
首先,它很容易被sql注入,因为你没有转义用户名。
其次,你应该将散列密码发送到数据库,它应该返回任何用户名和密码哈希匹配的用户。这样,有人无法通过输入错误的密码强制数据库发送密码哈希。
第三,如果没有从数据库返回任何行,会发生什么?密码失败的操作应与失败用户名的操作相同。
第四,您应该使用===来比较密码(尽管您根本不应该使用此方法)。您不希望空密码与FALSE或类似的东西匹配。此外,它只是节省资源。