当您验证注册用户时,您提出请求,例如,一个例子,我发现:PHP验证注册用户
$user = $_POST['user'];
$pw = $_POST['password'];
$sql = "SELECT user,password FROM users
WHERE user='$user'
AND password='$pw'
LIMIT 1";
$result = mysql_query($sql);
if (mysql_num_rows($result)){
//we have a match!
}else{
//no match
}
现在会有什么好处或末端具有LIMIT 1
的任何一点? 为什么你需要选择用户和密码时,你可以选择user_id?
岂不
SELECT user_id FROM users
WHERE user = '{$user}'
AND password = '{$pw}'
是完全相同的,但物流短代码?
编辑:思考这个小细节让我找到了一个更多的检查,以防止黑客。 不应该有一个以上的用户使用相同的电子邮件和密码,因此如果他们以某种方式提供密码123
串' OR password = '*'
(或类似的逻辑),这将危及我的查询,没有限制将帮助,因为下一步我可以指望
if (count($result) > 1) {
echo "we got hacked";
else
<proceed...>
是的,我这样做,但md5本身并不安全,因为许多网站与数据库保存散列和原始字符串我认为像crc32(md5(散列(“sha256”,$ _ POST ['密码'])))会好得多 – JohnA 2012-04-09 13:38:32