绕过mysql_real_escape_string的保护

时间:2010-11-07 18:36:48

标签: php mysql sql-injection

有些家伙向我挑战sql-inject他的代码。他说标题中的PHP函数应该足以满足这种情况。

$var = 'my malevolent input will be in here';
$var = mysql_real_escape_string($var);

$sql = "SELECT * FROM `users` WHERE `id` = '$var'";

mysql_query($sql);

我似乎无法绕过单引号转义。我应该使用什么作为$ var的值? 可以我用的东西吗?

谢谢,一如既往地

3 个答案:

答案 0 :(得分:2)

虽然在某些条件下某些服务器版本可能存在深奥的漏洞,但据我所知,以这种方式使用mysql_real_escape_string()通常被认为是安全的。

答案 1 :(得分:2)

不,使用mysql_real_escape_string被认为对任何输入都是安全的,除非使用mysql_client_encoding未正确设置字符编码。

答案 2 :(得分:0)

代码中有错误:

$sql = "SELECT * FROM 'users' WHERE 'id' = '$var'";

应该是

$sql = "SELECT * FROM 'users' WHERE 'id' = '".$var."'";

如果您不确定id是整数还是字符串。

如果你确定id总是一个整数,那么:

$sql = "SELECT * FROM 'users' WHERE 'id' = ".intval($var)

mysql_real_escape_string(); ^ _ ^

您将安全无恙