雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

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のソース見てみます。