@blog.justoneplanet.info

日々勉強

HTTPヘッダインジェクションを防ぐ

PHP5.1.2以前を使っている場合は特に気をつけねばならない。以下のようにHTTPヘッダにユーザ入力の値が入るとする。

header("Location: http://sample.org/{$input}");

■攻撃

$inputに改行が入っていた場合に成立する。

$input = '\n\n<script type="text/javascript">alert("attacked");</script>';

■対策

header("Location: http://sample.org/" . strtr($input, array("\r" => '', "\n" => '')));

但し、PHP5.1.2以降ではインジェクションに対する実装として、一度に複数のヘッダを送信することができなくなり改行コードは削除されるようになった。PHP 5.2.0では脆弱性が存在したようだ。

header("Location: http://sample.org/" . trim($input));

現代でも最低限このくらいはした方がよさそうだ。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment