FAQ: ***で使える串を探しています
「***」にはサイト名が入ります。「2ちゃんねる」でも何でもいいです。ただツール名は入りません。「特定のツールで使える串」という話は別の記事で書きます。
簡潔に言えば、「***というサイトで使えない串」というのは「***というサイトの串弾きに弾かれる串」です。で、あるからして「***というサイトで使える串」とは「***というサイトの串弾きを潜れる串」。サイトによって「串弾き」の方法は違いますし、また時間と共に進化していくでしょう。ここでは、多くのサイトが2005年1月である現在採用している「串弾き」の原理を紹介します。
で、紹介する前に根本的なことをいくつか書いておきます。
- ブラウジングは「(閲覧者からサーバーへの)リクエスト」「(サーバーから閲覧者への)レスポンス」によって成立している
※参考
- 「プロキシ」とは、ウェブサーバーとクライアントの間に立って「リクエスト」「レスポンス」の中継を行う代物だ
※参考
- ウェブサーバーは基本的に自分が受けた「リクエスト」がブラウザからのモノかプロキシによって中継されたモノかを判断することが出来ない
※参考
ウェブサーバーは基本的に自分が受けた「リクエスト」がブラウザからのモノかプロキシによって中継されたモノかを判断することが出来ない
故に、「串弾き」とは「本来は出来ないはずの『ブラウザからのモノかプロキシによって中継されたモノか』という判断を行う処理」であり、本質的に「無理のある処理」です。だからこそ、そこにはどうしても埋めることが出来ない「隙」がある。その「隙」をつくことが出来れば「串弾き」を行っているサイトでも串を使うことができる、と。
で、多くのサイトが採用している「串弾き」の方針なのですが。
□1: 「プロキシ特有の環境変数」の参照
クライアントがサーバーに対して送信したリクエストの一部は「環境変数」として、例えばCGIから参照されます。このメカニズム故に、「環境変数」というのは基本的にクライアントが自由に記述できる代物です。
※参考
しかし通常のブラウジングではユーザーはInternetExplorerなりNetscapeNavigatorなりといった「メジャーなブラウザ」を使う訳で、そうしたブラウザはユーザーの目に触れない部分で毎回同じような「環境変数」をサーバーに対し送信している訳です。
※参考
ところが、プロキシを経由しリクエストをサーバーに送信する場合、一部のプロキシは環境変数を勝手に書き換え(追記)してしまう。
※参考
このため、プロキシ経由のブラウジングでは本来あり得ないような環境変数がサーバーに対し送信されることになる場合がある。サーバーはこうした「本来あり得ないような環境変数」つまり「プロキシ特有の環境変数」をチェックし「それがプロキシ経由のブラウジングだ」という判断を行うことが可能です。
□2: リクエストの発信元
これはブラウジングに限った話ではありませんが、ネットにおいて通信を行う二台のマシンは必ず「相手のIPアドレス」を知っています。「通信」というモノが、いわば「文通」のような仕組みで行われるため、相手の住所(IPアドレス)を知らなければ相手にデータを送ることが出来ない。
※参考
であるからして、ウェブサーバーは「自分に対してリクエストを送ってきたマシンのIPアドレス」を知っている訳です。そして、IPアドレスが分かればホスト名を引くことが可能です。これを使えば、例えば「ホスト名の中に『proxy』という文字列があったらプロキシ」「(外人のアクセスを想定していない国内サイトの場合)ホスト名の中に『com』という文字列があったらプロキシ」といった判断を行うことが出来る。また、有名なプロキシサーバー(有名な「プロキシサーバーリスト公開サイト」で公開されているプロキシ)をデータベースに格納し、いわゆる「ブラックリストフィルタリング(これらのサーバーはプロキシなので遮断、という方針)」として「串弾き」を行うことも可能です。
□3: リクエスト発信元のポート開閉
IPアドレスが分かれば「そのマシンが特定ポートを開いているか否か」という判断は可能です。HTTPプロキシの多くはポート8080で公開されているため、「ポート8080が開いているIPアドレスからのアクセスはプロキシ経由である」という判断が出来る。
今回は「閲覧者側のためのコンテンツ」ということなので詳しくは書きませんが一応書いておくと、「あるIPアドレスのあるポートが開いているか否か」を調べるのは□1,2より難しいです。例えば無料サーバーで運営されている個人サイトの掲示板、といったレベルでは□3の串弾きは採用されていない可能性が高い。
ただ、□2,□3に共通して言えることですが、「プロキシサーバーソフトが走っているマシンからのリクエスト」は必ずしも「そのプロキシサーバーソフトによって中継されたリクエスト」ではない。
例えば僕がプロキシサーバーソフトを走らせていたとして、「僕自身が自分でブラウザから送ったリクエスト」と「プロキシサーバーソフトによって中継された、他人からのリクエスト」をウェブサーバーが判別することは出来ないからです。
□2,□3のような「串弾き」は、言ってしまえば「疑わしきを罰する」串弾きです。つまり
ただ、まぁ、「ポート8080が開いているマシンからのリクエストは(それが相手自身のモノであれ中継であれ)問答無用に弾く」ということは出来る
と。
・・・さて。要は□1〜3の「串弾き」を潜れる串ならば「***というサイト」でも使える可能性が高いでしょう。
□1: 「プロキシ特有の環境変数」を記述しない串
いわゆる「診断くん」とかでチェックすれば良いと思います。
□2: ホスト名が怪しくない/有名でない串
プロキシ公開サイトで「.ne.jp」等を検索すれば良いでしょう。最近はYahoo!BB等「.net」ドメインのプロバイダーも増えているので「.net」ドメインも弾かれにくくなっている気がします。そして検索結果から「proxy」「www」等が含まれるホスト名を除外しましょう(確認くんなどで自分の生IPを確認すれば分かると思いますが、通常一般ユーザーのホスト名に「www」などの文字は登場しません)。
また、「有名な」プロキシ公開サイトで公開されている串はブラックリストに登録されている可能性が高いので、なるべくマイナーな/海外の公開サイトを探すと良いでしょう。
※参考
□3: ポート8080を開いていない串
言い換えれば「ポート8080以外で公開されている串」ということになります(厳密に言えば、プロキシサーバーソフトをポート8080以外で走らせつつポート8080で別のソフトを走らせている「串」もあり得なくはないですがメリットがないですし現実問題存在しないでしょう)。
ただし、最後に書いておきますが「串弾き」「串弾き潜り」というのは何処まで行ってもイタチごっこです。序盤で書いたように「完璧な串弾き」というのは不可能です。不可能ですが「完璧に近い串弾き」は今後も開発され続けるでしょう。「串弾きを潜る」ためには「串弾き」を知らなければいけない。「串弾き」を知るためには「ブラウジング」「プロキシ」を知らなければいけない。・・・ということを「面倒だ」と思うならば「片っ端から試してみる」「他人が使っている串を教えて貰う」の方が楽だ、という判断もあり得るでしょう。

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