岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

NULLバイトをチェックすべきタイミング

PHPで、NULLバイト攻撃を防ぐためのチェックは、以下のようなタイミングで行わないとダメなんじゃないかと今日思った。

  1. バイナリセーフでない関数の実行直前
  2. NULLバイトが含まれているとマズい出力処理の直前

HTML出力時にXSSを防ぐためエスケープするとか、SQL生成時にSQLインジェクションを防ぐためにエスケープするとか、それらと同じイメージですね。

こう考えるとすごく楽で、$_GETや$_POST、はたまた外部Webサービスからの戻り値などに、いくらNULLバイトが含まれていようが、まったく気にする必要はないわけです。$_POSTに「<」や「>」や「&」や「"」や「'」が含まれていたって気にならないのと同じ理屈です。

また「これからのプログラムの作り方 – 文字エンコーディング検証は必須 – yohgaki's blog」にあるような、文字エンコーディング周りの脆弱性を衝く攻撃についても、同じ理屈で対処できるのではないかと思っています。DBがUTF-8ならSQLも確実にUTF-8にする、とかそんな感じで。