urlencode()是否足以在2011年停止所有SQL注入攻击

时间:2011-02-15 04:31:05

标签: php mysql

我将一些简单的用户数据传递到mysql数据库。

PHP的urlencode()返回一个字符串,其中除-_之外的所有非字母数字字符。已被替换为百分号(%)后跟两个十六进制数字。

我并不担心空间会变成加号或其他格式问题。 我也不担心XSS和其他HTML黑客攻击。

我相信我应该避免'和'风格攻击。

问题:是否有其他类型的sql攻击可以与 - 或_或。一起使用。 ?

实施例

mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29");

提前谢谢

4 个答案:

答案 0 :(得分:10)

urlencode()与SQL有无关,因此它可以防止SQL注入,因为煤油会让你的汉堡变得更加美味。此外,进入数据库的所有内容都将以URL编码结束,如果您想在检索数据库后对它们执行任何有用的操作,则必须对其进行解码。

另一方面,转义查询可以帮助您的应用程序防止SQL注入,仅此而已。它不会修改您输入查询的数据;只有保护您的查询不被篡改。这就是SQL注入的想法,这也是为什么URL编码数据没有做任何事情来防止它。当然,它 将你的撇号'变成%27,使它们无害,但正如上段所述,你必须将它们URL解码回撇号中为了使用它们。

使用正确的工具以达到正确的目的。特别是在2011年,您应该使用预准备语句,而不是手动转义查询变量并连接字符串以形成查询。

答案 1 :(得分:9)

没有。使用url编码进行SQL注入保护实际上很危险。

  1. 网址编码是百分比编码。 SQL中的%chars在许多数据库中具有特殊含义。示例:LIKE子句。在动态SQL中允许%字符仍然会导致问题。
  2. 存在中间(网络)服务器可能自动进行URL解码的风险。 Apache可能会这样做。

答案 2 :(得分:2)

我认为urlencode本身不足以阻止sql注入。您必须使用至少mysql_real_escape_stringprepared statements from PDO.

答案 3 :(得分:0)

使用PDO和参数化查询。