MYSQLクエリを作成するために$ _GET変数を使用していた場合、NULLバイトインジェクションが影響しますか?

可能重複:
  最良のPHP入力消毒機能とは何ですか?

たとえば、名前が「id」の $ _ GET 変数があるとします。次に、 $ _ GET 変数をmysqlクエリで使用して、 SELECT text FROM database = $ _ GET ['id']; mysql_real_escape_string()、addslashes()などの一般的なセキュリティ関数を使用していると仮定して、私の $ _ GET strip_tags()

1
質問を示唆しているように間違って使用していないと仮定すると、クエリの文字列リテラルには問題はありません。
追加された 著者 mario,

1 答え

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.)

5
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com