何时使用mysql_real_escape_string是否正确?何时使用mysql_real_escape_string()
当我使用isset我应该使用它(函数mysql_escape_string($ _ GET [ 'PARAM'])),
当我使用我应该使用它$富= mysql_real_escape_string($ _ GET [ '酒吧'] );
谢谢
何时使用mysql_real_escape_string是否正确?何时使用mysql_real_escape_string()
当我使用isset我应该使用它(函数mysql_escape_string($ _ GET [ 'PARAM'])),
当我使用我应该使用它$富= mysql_real_escape_string($ _ GET [ '酒吧'] );
谢谢
您需要在构建带有字符串文字的SQL查询时调用此函数。
你不应该在别处叫它。
调用此函数的目的是阻止您执行像SELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--'
这样的SQL。
mysql_real_escape_string
将转义'
字符,以便将邪恶字符串完全视为字符串。
只要不信任您在mysql查询中插入的数据以防止sql注入,就应该使用它。例如,所有用户都会形成数据。 在你的第一个例子中:没有。 第二个例子:是的,如果你打算在查询中使用$ foo变量。
无论何时将数据插入数据库查询(POST/GET数据),您都应该使用它,但如果您只需要检查数据,则不应使用它。
无论何时您想要在查询中使用用户的输入,都可以使用mysql_real_escape_string。
下面是如何使用它:
$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = '$user' AND password = '$password' ";
//the quotes are vital !! ^ ^or you will not be safe!
这里的示例代码不工作:
断码
$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = $user AND password = '$password' ";
在我可以登录到比如你系统通过输入任何密码和
user or (1=1) --
。这将使查询读取:
SELECT * FROM users WHERE user = user or (1=1) -- AND password = '$password
并且将批准所有登录,因为密码永远不会被检查。
使用的mysql_query,你永远只能同时执行一个SQL语句,所以:
$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysql_query($query);
将导致一个错误,因为不能成为;
后的一部分。
此代码然而将工作:
危险
$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysqli_query($query);
因为提高 mysqli_query并允许两个或更多的语句来一气呵成执行。
亲爱的驾驶者downvoter,这个答案是什么不正确? – Johan 2012-03-16 12:31:50
您需要**了解**这里的问题,否则最终会产生安全漏洞。 – SLaks 2011-06-05 15:32:10
这就是为什么我问这个问题,因为我不明白。 – Harigntka 2011-06-05 15:34:34