昨日の脆弱性対応

昨日の脆弱性対応

昨日かいたエントリの続き。当該CGIが動作しないところでちょっとだけ画面の見栄えが悪くなるだけで、メイン機能には問題ないんだけど、ウェブ担当者としては見栄えが悪いってのはほっとけない感じ。
アプリケーション開発担当者いわく修正に一ヶ月くらいかかるとかのんきなことを言っているので、フロンエンド側でなんとかすることにする。

リクエストの文法をチェック

当該CGIは画像を表示するためのもの。なんでそんなものがCGIになっているのか理解に苦しむが、ID単位で文章と画像をDB上にまとめているのでどうもこうなっているらしい。
CGIに与えれるパラメタには数種類あって、その引数は数字かxが入っている(100x200みたいな感じ)。
こんな感じですね。

hoge.cgi?foo=123&baa=100x200

mod_rewriteを利用して、適切なクエリ文字列のときだけ実際にアプリケーションが動作しているバックエンドサーバへプロクシするようにする。
こんな感じ。

RewriteCond %{REQUEST_URI}  "^cgi/app/hoge.cgi$"
RewriteCond %{QUERY_STRING} "(hoge|fuga)=[\dx]+&?)+$"
RewriteRule   ^.*$ http://server_address%{REQUEST_URI} [P,L]

RewriteCondの二行目が適切なクエリ文字列を定義しているところ。パラメタがhogeかfugaで、'='が続いて、数字かxが一文字以上、&はあってもなくても。その繰り返しが1回以上。
これで任意の文字列とかはバックエンドには渡らなくなります。