0

几个月来我一直在想这个问题,但我仍然不知道答案,除了可能的速度表现。长话短说,与其到处都有所有这些 PDO 代码,为什么不在每个字符之间放一个反斜杠呢?

$String = $_POST["attack"];   // SOME THING' OR 1 = 1 --
$String = fFilter( $String ); // \S\O\M\E\ \T\H\I\N\G\'\ \O\R\ \1\ \=\ \1\ \-\-

现在我已经有一段时间没有研究这个 SQL 的东西了,所以我不能给出一个完美的例子,但基本上 sql 字符串应该看起来像这样SELECT * FROM account WHERE id = '\S\O\M\E\ \T\H\I\N\G\'\ \O\R\ \1\ \=\ \1\ \-\-',这样的东西总是看起来很安全,但我还没有听说过任何人使用它,甚至为什么不使用它。我总是看到过滤 html 之类的东西不好,但我不明白为什么不只过滤每个字符。由于任何攻击都会看起来像\a\t\t\a\c\k

4

1 回答 1

8

因为在某些字符之前放置反斜杠会完全改变它们的含义。例如,\t是制表符,而不是t,因此\a\t\t\a\c\k将转换为:

a       ack

此类序列的完整列表见:

http://dev.mysql.com/doc/refman/5.5/en/string-literals.html

正如其他几个人提到的,使用参数化查询,而不是输入转义。

于 2013-07-31T01:27:44.247 回答