【问题标题】:fail execute statement with php and mysql使用 php 和 mysql 执行语句失败
【发布时间】:2011-12-10 18:45:00
【问题描述】:

我像这样插入用户输出:

  $userName= SanitizeString($userName);
  $pass= SanitizeString($pass);
  $email= SanitizeString($email);

  $userName=mysql_real_escape_string($userName);
  $pass=mysql_real_escape_string($pass);
  $email=mysql_real_escape_string($email);

  $salt = 'SHIFLETT';
  $password_hash = md5($salt . md5($pass.$salt));

 mysql_query("INSERT INTO users (user_name,pass,email,reputation,role,ban,date) VALUES ('$userName', '$password_hash', '$email', '$reputation',   '$role','false','$date')" ) or exit(mysql_error());

这就是 SanitizeString($var) 函数:

   function SanitizeString($var)
   {
       $var=stripslashes($var);
       $var=htmlentities($var, ENT_QUOTES, 'UTF-8');
       $var=strip_tags($var);
       return $var;
   }

但是当我尝试使用此查询查找用户密码和名称时。它失败了:

       $user_name=SanitizeString($user_name);
   $pass=SanitizeString($pass);


  $user_name=mysql_real_escape_string($user_name);
  $pass=mysql_real_escape_string($pass);


   $salt = 'SHIFLETT';
   $password_hash = md5($salt . md5($pass.$salt));

   $result=mysql_query("SELECT COUNT(*) AS Result FROM users WHERE user_name='$user_name' AND pass='$password_hash' LIMIT 1") or die(mysql_error());

如果计数大于 0,则表示它找到了一个结果,用户应该登录。但这不会发生..为什么?

对此进行更多更新:

   if(mysql_num_rows($result)>0)
       {
           echo "Login successful".mysql_num_rows($result);
           return $dataArray=TRUE;
       }
       else
       {
           echo "Login unsuccessful:".mysql_num_rows($result);
       }

【问题讨论】:

  • 您确定密码正确吗?
  • 可能是因为您的密码被清理了?我认为这不是必需的,因为您计算哈希
  • 制作哈希 md5(md5('your text here')) 的哈希绝不是一个好主意,因为它会使哈希变得不那么可靠。如果可能,也尝试使用 sha256。
  • 你检查结果的代码是什么?
  • 对 md5 加盐没有帮助吗?!?并使攻击无法进行。我从 Oreilly 出版的 php 安全书中获取了该算法

标签: php mysql md5


【解决方案1】:

如果你想使用COUNT(*),你必须使用GROUP BY,但是你可以像这样使用mysql_num_rows()获取行数。

$result=mysql_query("SELECT * AS Result FROM users WHERE user_name='$user_name' AND pass='$password_hash' LIMIT 1") or die(mysql_error());
$num_rows = mysql_num_rows($result);

【讨论】:

  • 对不起..我知道 group by 的答案无关紧要,但 mysql_num_rows 有效..我需要阅读一些关于 sha 和 md5 的内容
  • 我所做的是 if stament..then 我把 $row['Result']>0 ..instead..see update
  • 对不起,代码没有解决。即使我输入了错误的名称,我也得到 1 :(
猜你喜欢
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多