小学生でも分かるプロキシ講座(4)
小学生でも分かるプロキシ講座(1)さて、前回までで書いてきたように、「串」とは
小学生でも分かるプロキシ講座(2)
小学生でも分かるプロキシ講座(3)
小学生でも分かるプロキシ講座(3')
- クライアントからの「リクエスト」の一部を書き換えサーバーに転送する
- サーバーからの「レスポンス」の一部を書き換えクライアントに転送する
- リクエストに対する書き換えは基本的に2〜3箇所(宛先・GET・HOST)
- レスポンスに対する書き換えは基本的に1箇所(宛先)
基本的につまり、それ以上の書き換えを行う「串」も存在します。
いわゆる「初心者向けプロキシ講習」みたいなテキストで読んだ人も多いと思いますが、この世には「漏れ串」というモノが存在します。クライアントの生IPアドレスをサーバーに教えてしまう串。
いわゆる「匿名串」と「漏れ串」で、リクエスト・レスポンスの中継方法にはどのような差があるのか。「環境変数FORWARDED_FORにクライアントの生IPを吐く」という、典型的な漏れ串LeakProxyと、小学生でも分かるプロキシ講座(3)でも書いたProxyの差を見てみましょう。
| クライアント → Proxy |
|
GET http://WebServer/File HTTP/1.1 Accept: */* User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Host: WebServer |
| 大意: WebServerの「http://WebServer/File」をよこせ |
| クライアント → LeakProxy |
|
GET http://WebServer/File HTTP/1.1 Accept: */* User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Host: WebServer |
| 大意: WebServerの「http://WebServer/File」をよこせ |
| Proxy → WebServer |
|
GET /File HTTP/1.1 Accept: */* Accept-Language: ja User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Host: WebServer |
| 大意: お前のとこの「File」をよこせ |
| LeakProxy → WebServer |
|
GET /File HTTP/1.1 Accept: */* Accept-Language: ja User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Forwarded-For: クライアントの生IP Host: WebServer |
| 大意: お前のとこの「File」をよこせ |
リクエストに対する書き換えは基本的に2〜3箇所(宛先・GET・HOST)その2〜3箇所の書き換えしかなければ、原理的にウェブサーバーには
- クライアントの生IP
- それがプロキシ経由のアクセスであるという事実
- プロキシ設定を行わずにウェブページを開く場合の「クライアント→ウェブサーバー」のリクエスト
- プロキシ設定を行ってウェブページを開く場合の「プロキシ→ウェブサーバー」のリクエスト
「ウェブサーバー」というのは「自分のHDD内にあるファイル(の内容)をリクエストに応じレスポンスとして送信する」を役割とします。ウェブサーバーは基本的に「自分が受けたリクエスト」によってしか「相手に関する情報」を得ることが出来ない。そして、プロキシが余分な書き換え(or追記)を行うからこそ
- プロキシ設定を行わずにウェブページを開く場合の「クライアント→ウェブサーバー」のリクエスト
- プロキシ設定を行ってウェブページを開く場合の「プロキシ→ウェブサーバー」のリクエスト
・・・という原理を受け入れて貰えれば分かると思いますが、プロキシが記述する「本来前者には含まれないような文字列」の形式というのはケースバイケースです。プロキシは、中継を行う以上「リクエスト」を好きに書き換えることが出来る。どんな「書き換え」や「追記」や「一部削除」を行うかはプロキシ次第です。
※
ここでは「リクエスト」の書き換えのみを論じましたが、当然「レスポンス」だって「プロキシによって好きに書き換えられ得る代物」です。例えば「英語ウェブページを日本語に翻訳するプロキシ」は、レスポンス内の英文を日本語に翻訳してクライアントに転送している訳です。
小学生でも分かるプロキシ講座(5)
小学生でも分かるプロキシ講座(6)

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