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

Chr*_*ris 6 php mysql

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

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

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

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

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

例:

mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29");
Run Code Online (Sandbox Code Playgroud)

先感谢您

Bol*_*ock 11

urlencode()没有做与SQL,所以它尽可能防止SQL注入煤油确实让你的汉堡更美味.此外,进入数据库的所有内容都将以URL编码结束,如果您想在检索数据库后对它们执行任何有用的操作,则必须对其进行解码.

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

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

  • 我理解,对于大多数人来说,您希望传递信息.但我的问题更简单.问题是.如果唯一存在的非alpha是._和 - ,如何用上面的简单代码示例注入任何sql语句?你知道任何只使用那些字符和alpha的攻击吗?正如我所说,我不担心格式化,事实上它适合我的目的,让我们的urlencoded格式,因为我在网页之间传递它们. (2认同)

小智 9

不.使用url编码进行SQL注入保护实际上很危险.

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


Nik*_*Nik 2

我认为urlencode仅凭这一点不足以阻止 sql 注入。您必须至少使用mysql_real_escape_stringprepared statements from PDO.