如何检查哪个用户名或密码不正确?

时间:2011-02-18 12:55:09

标签: php

我想在单个mysql查询中检查哪个用户名或密码不正确。

情景:

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

4 个答案:

答案 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
    }
    ?>