1|2|3HTTPリクエストを利用する変数を調べるHTTPリクエストに含まれる値を利用している、Perl、PHP、Java各言語における変数の一部を以下に示す。Server/2.0.61、Tomcat/5.5.25を利用した。Perl、PHPにおけるCGI/1.1の環境変数については、RFC3875で定義されているが、実際に取得可能な値については実装に依存する。各言語における、HTTPリクエストに含まれる値を利用している変数これらの値は、HTTPリクエストを書き換えることで格納される値が変化することに注意したい。HTTPリクエストヘッダについては実際に攻撃が可能か否かについては、受動的攻撃か能動的攻撃かに依存し、また、FlashによるHTTPヘッダ書き換えの制限などにも影響される。Webアプリほのぼの改造計画番外編(2)赤坂さん、Flashを攻める!http://www.atmarkit.co.jp/fsecurity/rensai/hoshinoex02/hoshinoex01.html上記表内で示される環境変数やメソッドにおいて、サーバ側の設定の値と同じ値が格納されているものなどがあるが、実際には、HTTPリクエストの情報から取得している場合があるため、利用する場合には想定外の値が格納されていないかに注意する必要がある。PerlやPHP(CGI/1.1)では、「環境変数」という呼称であるために、サーバ側の設定を読み込んでいるものと勘違いしやすいのではないだろうか。これらの変数などから直接値を取得しない場合でも、利用している関数が内部的にHTTPリクエストから得られる情報を利用している場合、影響を受けてしまうことになる。Apache-Tomcatの脆弱性としてすでに修正済みではあるが、例えばCVE-2007-1358などは、Strutsが提供するHTMLタグライブラリなどが、HTTPヘッダから取得したAccept-Languageの値をjavax.servlet.ServletRequest#getLocale()メソッド経由で取得し、HTMLエンコードせずに出力していたために、クロスサイトスクリプティングが動作するという現象が起きていた。利用する関数のすべてのソースを確認することは現実的ではないので、実際にHTTPリクエストを操作して問題が起きないか、また、HTTPリクエスト内に含まれる文字列がそのまま利用されていないかなどをチェックすることで対応できる。(リクエストヘッダって結構どこで使われているか分かりづらいな......。いままで変なとこで使っていたりしてしないかな......)GET/POSTパラメータは?クウはHTTPヘッダの基本的な挙動について試したので、次にGET/POSTパラメータについていろいろ操作を行うことにしてみた。クウはテスト用のパラメータを送信するダミーページなどを使ってGET/POSTパラメータを操作したことがあるので、どういった操作を行うべきかある程度理解していた。クウは、以前に自分が作ったWebアプリケーションを、ツールを経由したままで巡回してみた。