mod_rewriteで改行を対象としたい場合
若干ハマったのでメモ。
URLに改行を含む場合はトップページにリダイレクト
要件はこんな感じです。まぁ改行コードインジェクション対策ですね。
http://www.atmarkit.co.jp/fsecurity/rensai/httpbasic05/httpbasic03.html
いざ実装
で、やろうとしたわけですよ。最初はこんな感じ。
RewriteRule (%0d|%0a) / [R,L]
CRもしくはLFのコードが含まれていたらトップページにリダイレクトです。
結論言うと上記は動きません。
なんで?
mod_rewriteでの判断はURLデコード後の文字列で判断されるようです。
そうなると当然エスケープ文字で記述したとしても動くわけないですね。
というわけでこう書いたら動きました。
RewriteRule (\r|\n) / [R,L]
ちなみに
クエリーストリングの場合はデコード後の文字列で判断されるようです。
なのでクエリーストリングも見る場合は以下。
RewriteCond %{QUERY_STRING} (%0d|%0a) [OR] RewriteCond %{REQUEST_URI} (\r|\n)
RewriteRule .* / [R,L]
動くには動いたけどほんとにこれでいいのかねぇ。。
今度mod_rewriteのソース見てみます。