初級CGIクラックガイド(5)
偉そうな言い方をすれば、「知識」とは以下のようなプロセスを辿ることで手に入る代物だと思います。
「環境変数」というテーマに関しては、今回の連載では「2」までにします。
「環境変数」に関する「漠然とした全体像の把握」は以下でしょう。
こうした環境変数は「CGIに対する入力」ですが基本的に閲覧者の制御下にはありません(例えばIPアドレスを任意に偽装することが可能か?ということです。HTTPプロクシなどを使い「本来と異なる値にする」ことは可能ですがそれでは「任意に」にはならない)。
そして、これがこの連載の主題です。
「環境変数」と言われると「自分に関する情報が知らない間にCGIに引き渡されているんだ」というイメージを持っている人が多いと思います。たしかにIPアドレスとかはそうです。しかし、頭に「HTTP_」がつく環境変数は完全に「閲覧者の制御下にある入力」なんです。通常のブラウジングではIE等ブラウザが勝手に「入力」を行っている(=「環境変数群」に様々な情報を書き込みリクエストを行っている)から閲覧者から見えにくいだけで。
極端な話、リクエスト内に「Favorite-Cup: E-Cup」と書けば、CGIからの「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報参照が可能になります。
もちろん、例えば「f(x)=3x+5」という関数に「a=5」を代入しても仕方がない。「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報がCGIで利用されることはまずないでしょう。しかし、この世には「全ての環境変数をデータファイルにログる」というCGIも存在する。その場合、データファイル内に「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報が書き込まれることになります。・・・「データファイルを見た管理人を笑わせる」という目的ならば有効かもしれません。
さて、「頭にHTTP_がつく環境変数」にはどんなものがあるのか。
ただ。上記を踏まえれば「当たり前」なんですが、「HTTP_」で始まる環境変数ってのはクライアント(=閲覧者)が自由に追加できる代物です(※)。
- 漠然とした全体像の把握
- 整然とした分類
- 体系立てられた全体像の把握
「環境変数」というテーマに関しては、今回の連載では「2」までにします。
「環境変数」に関する「漠然とした全体像の把握」は以下でしょう。
例えば確認くんを開いてみて下さい。あなたのIPアドレスや使用ブラウザやリンク元アドレス(このページのURL)や様々な情報が表示されたと思います。こうした「閲覧者に関する情報」は「環境変数」としてCGIから参照されます。
閲覧者は、例えば「User-Agent(使用ブラウザ)」を一部タブ型ブラウザ等によって制御することができます。
参考: User-Agentで掲示板荒らし
結論から先に書きます。「環境変数」は大きく二つに分類できる。閲覧者は、例えば「User-Agent(使用ブラウザ)」を一部タブ型ブラウザ等によって制御することができます。
参考: User-Agentで掲示板荒らし
- 頭に「HTTP_」がついていないもの
- 頭に「HTTP_」がついているもの
□頭に「HTTP_」がついていないもの
サーバーは「自分が閲覧者について知っている情報」をCGIに引き渡します。そうした情報群が「頭にHTTP_がついていない環境変数」。例えば「閲覧者のIPアドレス」はこっちですね。環境変数REMOTE_ADDR。こうした環境変数は「CGIに対する入力」ですが基本的に閲覧者の制御下にはありません(例えばIPアドレスを任意に偽装することが可能か?ということです。HTTPプロクシなどを使い「本来と異なる値にする」ことは可能ですがそれでは「任意に」にはならない)。
□頭に「HTTP_」がついているもの
リクエスト内の「環境変数群」に記述された文字列「A: B」がそのまま「環境変数AはB」という具合に参照されます。ただし「A」に関しては、小文字は大文字に・「-」は「_」に置換され、頭に「HTTP_」がくっつきます。例えば、「User-Agent: unknown」と書いたならば「環境変数HTTP_USER_AGENTは『unknown』」になります。そして、これがこの連載の主題です。
「環境変数」と言われると「自分に関する情報が知らない間にCGIに引き渡されているんだ」というイメージを持っている人が多いと思います。たしかにIPアドレスとかはそうです。しかし、頭に「HTTP_」がつく環境変数は完全に「閲覧者の制御下にある入力」なんです。通常のブラウジングではIE等ブラウザが勝手に「入力」を行っている(=「環境変数群」に様々な情報を書き込みリクエストを行っている)から閲覧者から見えにくいだけで。
極端な話、リクエスト内に「Favorite-Cup: E-Cup」と書けば、CGIからの「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報参照が可能になります。
もちろん、例えば「f(x)=3x+5」という関数に「a=5」を代入しても仕方がない。「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報がCGIで利用されることはまずないでしょう。しかし、この世には「全ての環境変数をデータファイルにログる」というCGIも存在する。その場合、データファイル内に「環境変数HTTP_FAVORITE_CUPは『E-Cup』」という情報が書き込まれることになります。・・・「データファイルを見た管理人を笑わせる」という目的ならば有効かもしれません。
さて、「頭にHTTP_がつく環境変数」にはどんなものがあるのか。
ただ。上記を踏まえれば「当たり前」なんですが、「HTTP_」で始まる環境変数ってのはクライアント(=閲覧者)が自由に追加できる代物です(※)。
※
例えば、僕がIE,NN,Operaに続く第四のブラウザ「tokix-browser」を開発したとしましょう。tokix-browserはインストール画面で「あなたの好きなカップは?」と質問し答えを「環境変数Favorite-Cup」として「(ブラウズ時サーバーに引き渡す)リクエスト」の中に記述するとしましょう。そんなtokix-browserがシェアを伸ばせば、世に出回る「アクセス解析CGI」は環境変数HTTP_FAVORITE_CUPを記録するのが当たり前になるかもしれませんよ。
・・・まぁ、「HTTP_」で始まる環境変数ってのは本質的にその程度の存在です。ということを言いたかった。
ということで、「一般的なモノ」を羅列します。「HTTP_」で始まる環境変数・・・「完全に閲覧者の制御下にある」入力・・・の中で、CGIから参照されることが多いもの。例えば、僕がIE,NN,Operaに続く第四のブラウザ「tokix-browser」を開発したとしましょう。tokix-browserはインストール画面で「あなたの好きなカップは?」と質問し答えを「環境変数Favorite-Cup」として「(ブラウズ時サーバーに引き渡す)リクエスト」の中に記述するとしましょう。そんなtokix-browserがシェアを伸ばせば、世に出回る「アクセス解析CGI」は環境変数HTTP_FAVORITE_CUPを記録するのが当たり前になるかもしれませんよ。
・・・まぁ、「HTTP_」で始まる環境変数ってのは本質的にその程度の存在です。ということを言いたかった。
- HTTP_REFERER - いわゆる「リンク元URL」
- HTTP_USER_AGENT - 閲覧者が使用しているブラウザ
- HTTP_ACCEPT_LANGUAGE - 閲覧者が受け入れ可能な言語
- HTTP_ACCEPT_ENCODING - 閲覧者が受け入れ可能なエンコード
- HTTP_CONNECTION - データ受信後のサーバーとのコネクション
- HTTP_COOKIE - いわゆる「クッキー」

TrackBack
この記事へのトラックバック