質問: $ _ GET ['id'];` `mysql_real_escape_string()`、addslashes()などの一般的なセキュリティ関数を使用していると仮定して、私の `$ _ GET` `strip_tags()`?
回答: > mysql_real_escape_string()、addslashes()、およびstrip_tags()のような共通のセキュリティ関数を使用していると仮定すると、$ _GET変数のnullバイトインジェクションが私に影響しますか? > > おそらくそうではありませんが、はるかに単純な注射があなたに影響を与えるでしょう。これをGETパラメータとして渡してみてください: ``` 99999 OR id=0 ``` 上記のクエリを実行します。 `mysql_real_escape_string` を使用していても、任意のSQL **を注入できます。** **一般的な考え方とは異なり、値が引用符で囲まれていない場合、 `mysql_real_escape_string()`はあなたを保護しません。 数値を照会する場合は、値を文字列に挿入する前に数値であるかどうかをテストするか、値を引用符で囲みます。 ``` $id = mysql_real_escape_string($_GET["id"]); $query = "SELECT text FROM database WHERE id='$id'"; ``` `addslashes` and `strip_tags` have no value at all in this context. They only serve to break data, but they add no security when inserting stuff in a database. Just get rid of them. (`strip_tags` may be appropriate later when you output something on a HTML page.)**