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 に答える