我想在单个mysql查询中检查哪个用户名或密码不正确。
情景:
当用户键入用户名和密码并单击“提交”时,我想显示错误消息,哪一个不正确。我需要一个简单而优化的查询。
答案 0 :(得分:4)
作为一般的经验法则,我会说最好将一条消息返回给用户说“用户名或密码不正确”,因为它不会向攻击者表明用户名或密码是否错误。
答案 1 :(得分:3)
这是攻击者找到有效用户名的好方法。
要回答你的问题,我认为你必须这样做
SELECT username, password WHERE username=? OR password=?
然后使用给定的用户名和密码查看结果,找到正确的结果。
答案 2 :(得分:1)
$query = <<<EOL
SELECT IF(password = '$password', 1, 0)
FROM users
WHERE username='$username'
EOL;
$result = mysql_query($query)
if (mysql_numrows($result) == 0) then
echo 'Bad username';
} else {
$row = mysql_fetch_array($result);
if ($row[0] == 0) then
echo 'Bad password';
}
}
当然,这假设$ username和$ password已被正确转义,并且$ password已被按摩到您用于将其存储在数据库中的任何哈希/加密方法。
答案 3 :(得分:0)
请使用HTMl表单和POST方法使用以下代码::
<?php
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("My_TABLE_NAME", $con);
$Username = $_POST['Username']; // get username
$Password = $_POST['Password'] ; // get pwd
$sql="SELECT Username FROM My_TABLE_NAME WHERE Username=’".$Username.”’ and Password=’”.$Password.”’”;
$r = mysql_query($sql);
if(!$r) {
$err=mysql_error();
print $err;
exit();
}
if(mysql_affected_rows()==0){
print "no such login in the system. please try again.";
exit();
}
else{
print "successfully logged into system.";
//proceed to perform website’s functionality – e.g. present information to the user
}
?>