为什么要使用mysql_real_escape_string,不会addlashes阻止一切?

时间:2010-03-29 18:51:08

标签: php security

我正在查看文档并偶然发现mysql_real_escape_string(),我不明白为什么它只是在addslashes()时才有用。有人能告诉我一个有用的原因吗?

我也很好奇为什么它需要数据库连接....这似乎是很多开销。

2 个答案:

答案 0 :(得分:7)

There is a great article about this here.discussion也指出了每种解决方案的优缺点。

  

addslashes()来自开发人员   PHP而是   mysql_real_escape_string使用   基础MySQL C ++ API(即来自   MySQL的开发人员)。   mysql_real_escape_string转义EOF   字符,引号,反斜杠,马车   返回,空值和换行符。那里   也是charset方面。

答案 1 :(得分:2)

虚空mysql_real_escape_string()或addslashes()会阻止一切(xss甚至xsrf怎么办?),最重要的是它们会阻止所有SQL注入。

例如,此代码容易受到sql注入:

mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));

利用漏洞:

http://localhost/test.php?id=1 or sleep(50)

补丁:

mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");

使用ADODB或PDO的参数化查询,这是唯一的防弹sql注入保护。