有些家伙向我挑战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的值? 可以我用的东西吗?
谢谢,一如既往地
答案 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();
^ _ ^