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));
現代でも最低限このくらいはした方がよさそうだ。
TrackBack URL :
Comments (0)
コメントはまだありません»
No comments yet.
RSS feed for comments on this post.TrackBack URL
Leave a comment