2011-02-18 49 views
-1

我想检查一个mysql查询中哪个用户名或密码不正确。如何检查哪一个用户名或密码不正确?

场景:

当用户键入用户名和密码,并点击提交,我想显示错误消息哪一个是不正确。我需要一个简单和优化的查询。

+4

你已经试过了什么?你的问题太宽泛而模糊,无法正确回答。 –

+6

你不想显示哪个不正确。你想要显示这个对是否不正确,否则你可以很容易地让攻击者找到有效的用户名。 –

+5

我喜欢看到一个错误消息“你的密码是正确的,但你的用户名是错误的”的想法 – Gareth

回答

4

作为一般的经验法则,我会说最好是向用户返回一条消息,说“用户名或密码不正确”,因为如果用户名或密码错误,它不会向攻击者指出。

3

这是攻击者找到有效用户名的好方法。

要回答你的问题,我认为你必须做

SELECT username, password WHERE username=? OR password=? 

,然后再通过与给定的用户名和密码的结果,要找到合适的人。

+0

请注意,您不提倡在此输入明文密码 – Gareth

0

请使用与POST方法使用HTML表单下面的代码::

<?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 
    } 
    ?> 
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已经正确转义,而$的密码已被按摩到无论使用何种散列/加密方法将其存储在数据库中。