php中的sql注入

php中的sql注入,php,mysql,Php,Mysql,我用php编写的查询是: $sql="SELECT * FROM ".TABLE_PREFIX."login WHERE username ='".$username."' AND password='".$password."'"; $res_id = mysql_query($sql); $num_rows = mysql_num_rows($res_id); echo $num_rows; 当我从表单中输入有效的用户名和密码时,它工作正常 当我输入一些sql注入代码时,查询

我用php编写的查询是:

$sql="SELECT * FROM ".TABLE_PREFIX."login WHERE username ='".$username."' 
      AND password='".$password."'";
$res_id = mysql_query($sql);
$num_rows = mysql_num_rows($res_id);
echo $num_rows;
当我从表单中输入有效的用户名和密码时,它工作正常

当我输入一些sql注入代码时,查询输出为:

SELECT * FROM form_login WHERE username ='' or '1'='1' AND password='' or '1'='1'
这是一个有效的sql语句。但它给出的输出行数为0

如果我在程序本身中编写的输出sql语句与-

$sql="SELECT * FROM form_login WHERE username ='' or '1'='1' 
   AND password='' or '1'='1'";
它工作得很好,给例3带来了一些效果


如何通过输入sql注入代码获得正确的结果

在查询中使用任何变量之前,请先传递它。

尝试回显SQL语句。它可能不是您想象的那样,特别是如果启用了magic\u quotes\u gpc。

或者更好,永远不要连接SQL

尝试将PDO库与

此模式下的值本质上是安全的。

您需要输入'OR 1=1;-请注意,用户名后面的空格。 在那之后,你在密码中输入什么都不重要,因为它会被注释掉

这将转换为以下SQL语句:

SELECT * FROM form_login WHERE username ='' or 1 = 1; -- AND password= 'whatever'

您在用户名和密码框中输入的确切文本是什么?我认为在这种情况下,他希望进行SQL注入;不是任何变量,而是仅用引号括起来的变量。我重复了sql语句,我的sql语句与我在问题中给出的一样。从form_login中选择*,其中username=或'1'='1'和password=或'1'='1',但结果不一致。