可能重复:
SQL injection that gets around mysql_real_escape_string()
我没有看到任何有价值的信息或没有过时的信息。 所以,有这样一个问题:Does mysql_real_escape_string() FULLY protect against SQL injection?但是它已经过时了(它来自'09),所以从12月的php 5.3和mysql 5.5开始,它是否完全保护?
答案 0 :(得分:11)
mysql_real_escape_string ALONE可以阻止没有。
此外,此功能与注射完全无关。
每当你需要转义时,你都需要它,尽管有#34;安全",但仅仅因为它是SQL语法所必需的。而你不需要它,逃避不会帮助你甚至一点点。
此功能的使用很简单:当您必须在查询中使用带引号的字符串时,您必须转义它的内容。不是因为一些想象中的恶意用户"而是仅仅是为了逃避用于分隔字符串的这些引号。这是一个非常简单的规则,但却被PHP人员误解了。
这只是语法相关的功能,与安全无关。
在安全问题上取决于此功能,相信它将保护您的数据库免受恶意用户的侵害。 将引导您注射。
你可以自己做出的结论:
不,此功能不够。
准备好的陈述也不是一个灵丹妙药。它仅涵盖了一半可能的案件。有关详细信息,请参阅important addition I made to the famous question
答案 1 :(得分:4)
这些帖子表示,如果你的字符串中有unicode编码的字符,那么它们会被真正的转义字符串遗漏,但会被mysql引擎评估 - 暗示你确实可以对一个良好的注入开放。< / p>
我不记得博文,但this question on here在同一个球场。
答案 2 :(得分:0)
是。通过使用本机mysql转义函数正确转义字符串,无法“突破”并执行查询。
然而,更好的方法是使用准备好的陈述。这将做很多事情。通过使用预准备语句,您可以利用数据库中的更多优化,它将正确地转义传入的任何数据。请查看:http://php.net/manual/en/mysqli.prepare.php