【发布时间】:2012-10-13 03:36:40
【问题描述】:
我最近在向我的朋友解释参数化及其优点,他问它在安全性方面比 mysqli_escape_string 好多少。具体来说,您能想到任何 SQL 注入示例,尽管输入字符串被转义(使用 mysqli_escape_string),但仍会成功?
更新:
对于我最初的问题不够清楚,我深表歉意。这里提出的一般问题是,尽管转义输入字符串,SQL 注入是否可能?
【问题讨论】:
-
来自手册: > 自 PHP 5.3.0 起,该函数已被弃用。强烈建议不要依赖此 > 功能。不要在已弃用的代码上投入精力。使用参数绑定,不用担心SQL注入。
-
请不要使用
mysql_*函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is good tutorial。另见Why shouldn't I use mysql functions in PHP? -
这个我已经知道了,我不提倡使用mysql扩展。我只是要求您说明如何它是易受攻击的。
-
这是因为它被替换为
mysqli_real_escape_string(),而不是因为你不应该再转义字符串了。 -
@martinstoeckli:这种变化也对答案产生了影响:)
标签: php mysql sql-parametrized-query