我正在查看文档并偶然发现mysql_real_escape_string(),我不明白为什么它只是在addslashes()时才有用。有人能告诉我一个有用的原因吗?
我也很好奇为什么它需要数据库连接....这似乎是很多开销。
答案 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注入保护。