我还没有看到任何有价值或不过时的信息。 所以,有这个问题: mysql_real_escape_string()是否完全防止SQL注入? 然而它非常过时(它来自'09),因此在12月的php 5.3和mysql 5.5中,它是否完全保护?
我还没有看到任何有价值或不过时的信息。 所以,有这个问题: mysql_real_escape_string()是否完全防止SQL注入? 然而它非常过时(它来自'09),因此在12月的php 5.3和mysql 5.5中,它是否完全保护?
mysql_real_escape_string ALONE可以防止 没有。
此外, 这个功能与注射完全没有关系。
每当你需要逃脱时,你需要它尽管“安全”,但仅仅因为 它是SQL语法所必需的。 在你不需要它的地方,逃避也不会对你有所帮助。
使用此功能很简单:必须使用时 引用的字符串 在查询中,您必须转义它的内容。不是因为一些想象中的“恶意用户”,而只是为了逃避用于分隔字符串的这些引号。这是一个非常简单的规则,但却被PHP人员误解了。
这只是语法相关的功能,而不是安全相关。
在安全问题上取决于此功能,相信它将“保护您的数据库免受恶意用户攻击” 将 引导你注射。
你可以自己做出的结论:
不,这个功能还不够。
准备好的陈述 也不是一颗银弹。 它仅覆盖了一半可能的病例。见 我对这个着名的问题做了重要的补充 细节
很长一段时间以来,我读了一篇关于此的博文,所以它可能不再适用但是...
这些帖子表示如果你的字符串中有unicode编码字符,它们将被真正的转义字符串遗漏,但会被mysql引擎评估 - 暗示你确实仍然可以打开一个良好的注入。
我不记得博客文章了 这个问题就在这里 是在同一个球场。
是。通过使用本机mysql转义函数正确转义字符串,无法“突破”并执行查询。
但是,更好的方法是使用预先准备好的陈述。这将做很多事情。通过使用预准备语句,您可以利用数据库中的更多优化,并且可以正确地转义传入的任何数据。请查看: http://php.net/manual/en/mysqli.prepare.php