mysql使用addslashes()

时间:2011-01-19 02:12:43

标签: php sql mysql

  

可能重复:
  What does mysql_real_escape_string() do that addslashes() doesn't?

如果你试图阻止sql注入,你要做的第一件事就是使用mysql_real_escape_string。是否可以使用addslashes()注入数据库?

3 个答案:

答案 0 :(得分:6)

addslashes是str_replace($str, "'", "\\'")的粗略等价物。您可以使用在mysql中评估为'的任意数量的unicode序列轻松绕过它,但看起来与addslashes()完全不同。

另一方面,

Mysql_real_escape_String()使用实际的内部mysql转义函数,该函数确切地知道要查找和修复的内容,以使其对mysql“安全”。什么适用于mysql可能不适用于另一个数据库,因为每个数据库的转义语义和要求略有不同,但如果您正在使用mysql,那么“真正的转义字符串”是可行的方法。

答案 1 :(得分:1)

当您只在理解unicode编码的语言中添加斜杠(或在发送查询时混合编码)时会发生这种情况:http://bugs.mysql.com/bug.php?id=22243

基本上,知道数据库在编码方面的期望是更安全的 - 这样你就不会意外地逃脱一半角色,或者留下未转义角色的后期部分。

答案 2 :(得分:0)

如果您将未加引号的数据添加到表中,例如

,仍然可以
SELECT * FROM tbl WHERE id = 10

在这里,您要确保此ID正好是一个数字

$id = intval( $_GET[ 'id' ] ) ;
$query = "SELECT * FROM tbl WHERE id = {$id}" ;
$result = mysql_query( $query ) ;
// ... bla-bla