トップページに戻る

Category

AllArchives

Checker

Credit

小学生でも分かるプロキシ講座(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」をよこせ
クライアントから(「インターネットオプション」→「接続」に設定された)プロキシへの「リクエスト」は、その串が匿名串であれ漏れ串であれ変わらない。しかしこの後が違う。
ProxyWebServer
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」をよこせ
LeakProxyWebServer
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」をよこせ
「漏れ串」とは、「リクエスト中継時に余分な書き換え(or追記)を行う串」のことです。
リクエストに対する書き換えは基本的に2〜3箇所(宛先・GET・HOST)
その2〜3箇所の書き換えしかなければ、原理的にウェブサーバーには
  • クライアントの生IP
  • それがプロキシ経由のアクセスであるという事実
は伝わらない。小学生でも分かるプロキシ講座(3)で書いた
  • プロキシ設定を行わずにウェブページを開く場合の「クライアント→ウェブサーバー」のリクエスト
  • プロキシ設定を行ってウェブページを開く場合の「プロキシ→ウェブサーバー」のリクエスト
を比べてみて下さい。何も変わらない。変わらなければ「リクエスト」を受けたウェブサーバーは「それがクライアントから送られたリクエストなのかプロキシによって中継されたリクエストなのか」を判断することは(基本的に)出来ない。
「ウェブサーバー」というのは「自分のHDD内にあるファイル(の内容)をリクエストに応じレスポンスとして送信する」を役割とします。
ウェブサーバーは基本的に「自分が受けたリクエスト」によってしか「相手に関する情報」を得ることが出来ない。そして、プロキシが余分な書き換え(or追記)を行うからこそ
  • プロキシ設定を行わずにウェブページを開く場合の「クライアント→ウェブサーバー」のリクエスト
  • プロキシ設定を行ってウェブページを開く場合の「プロキシ→ウェブサーバー」のリクエスト
が変わってくる。本来前者には含まれないような文字列が「(プロキシ→ウェブサーバーの)リクエスト」の中に現れる。ウェブサーバーは「リクエスト」内の「本来前者には含まれないような文字列」を発見し「それがプロキシ経由のアクセスだ」という判断を行う。「本来前者には含まれないような文字列」に「クライアントの生IPアドレス」が含まれていれば、プロキシ経由であってもクライアントの生IPアドレスを取得することが可能になる(「クライアントの生IPアドレス」を「本来前者には含まれないような文字列」に記述し中継を行う串が「漏れ串」と呼ばれる)。

・・・という原理を受け入れて貰えれば分かると思いますが、プロキシが記述する「本来前者には含まれないような文字列」の形式というのはケースバイケースです。プロキシは、中継を行う以上「リクエスト」を好きに書き換えることが出来る。どんな「書き換え」や「追記」や「一部削除」を行うかはプロキシ次第です。

ここでは「リクエスト」の書き換えのみを論じましたが、当然「レスポンス」だって「プロキシによって好きに書き換えられ得る代物」です。例えば「英語ウェブページを日本語に翻訳するプロキシ」は、レスポンス内の英文を日本語に翻訳してクライアントに転送している訳です。
小学生でも分かるプロキシ講座(5)
小学生でも分かるプロキシ講座(6)

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

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

Comment

PostForm

情報を登録  
コメントは本文以外省略可能で、当方の承認後掲載されます