2011-06-05 58 views
1

何时使用mysql_real_escape_string是否正确?何时使用mysql_real_escape_string()

当我使用isset我应该使用它(函数mysql_escape_string($ _ GET [ 'PARAM'])),

当我使用我应该使用它$富= mysql_real_escape_string($ _ GET [ '酒吧'] );

谢谢

+2

您需要**了解**这里的问题,否则最终会产生安全漏洞。 – SLaks 2011-06-05 15:32:10

+0

这就是为什么我问这个问题,因为我不明白。 – Harigntka 2011-06-05 15:34:34

回答

1

您需要在构建带有字符串文字的SQL查询时调用此函数。
你不应该在别处叫它。

调用此函数的目的是阻止您执行像SELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--'这样的SQL。
mysql_real_escape_string将转义'字符,以便将邪恶字符串完全视为字符串。

+0

谢谢,我现在明白了。 – Harigntka 2011-06-05 15:37:22

+1

mysql_real_escape_string()与'mysql_query'和'mysql_query'一起工作**不**一次执行两个查询。 **那个特殊的注入漏洞不是问题,只有mysqli_query。此外,你没有声明你需要把''''''单引号括起来。 -1为不正确和不完整的答案。 – Johan 2011-06-05 16:14:04

0

只要不信任您在mysql查询中插入的数据以防止sql注入,就应该使用它。例如,所有用户都会形成数据。 在你的第一个例子中:没有。 第二个例子:是的,如果你打算在查询中使用$ foo变量。

0

无论何时将数据插入数据库查询(POST/GET数据),您都应该使用它,但如果您只需要检查数据,则不应使用它。

-1

无论何时您想要在查询中使用用户的输入,都可以使用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! 

这里的示例代码不工作:

enter image description here断码

$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并允许两个或更多的语句来一气呵成执行。

+0

亲爱的驾驶者downvoter,这个答案是什么不正确? – Johan 2012-03-16 12:31:50

相关问题