SPAMメール業者はたくさんのメールアドレスを取得しているがそれはどうやって取得しているのか? いろいろなサイトを見ていると、どうも、Webサーバを自動巡回してメールアドレスをプログラムなどで自動取得しているようである。
取得したテキスト内のメールアドレスの判別ルーチンは「@」の前後の文字列をGetすればなんとかできてしまいそうである。
自動判別プログラムの巡回防止策としてよくあるのは「@」マークをわざと全角の「@」で標記したり、メールアドレスを画像表示したりするものがある。
メールアドレスを画像表示するプログラムでは、Handmailが有名だ。
http://handmail.org/
Handmailは入力された文字列を画像ファイルにする仕組みなのでメールアドレス以外にも英数字であれば、表示可能だ。何故英数字であるかといえばおそらくHandmailで用意されているfontが英数字のみしか存在しないからではないかと思う。
ここで、ちょっとFORMから画像を表示する際のプログラムについて考察してみる。
通常FORMでサーバにデータを送るときはPOSTとかGETとかという方法(METHOD)を利用する。で、CGI(Common Gateway Interface)というサーバのプログラムはGETまたはPOSTで渡されたデータをサーバ上で処理して、その結果を問合せ先に送るような仕組みになっている。
BLOGでは通常、管理者画面から記事を入力して記事を作成するが、サーバとクライアントの間で何が行われているかといえば、自宅のパソコンから作成した記事をサーバにデータとして送り、サーバはそれを「ある規則・法則」に則って処理し、データをストックする。
BLOGの場合は、HTML形式で静的に保存されることが多い。静的に保存されるというのはどういうことかと言えば、部品をくみ上げた状態で保存するということ。
なので、通常BLOGを利用している際に、前の記事を変更したり、レイアウトを変更したりすると「記事を再構築してください」などと管理者画面でアラートが表示されるのは、静的なHTMLファイルを変更する(作り変える)作業が必要になるからである。
利用したことがないのでわからないのですが、JUGEMなどは記事ごとにGETで動的に記事を作成しているように見えます。
例えば、レンタルDVDのTUTAYAが開設している、「
「ロズウェル」応援Blog」のサイトはJUGEMの仕組みを利用しています。
最其の記事で「
ロズウェル サード・シーズン レンタル決定!」という記事がありますが、この記事のURLは、
http://roswell.tsutaya.jp/?eid=50となっており、記事番号の50をGETメソッドで渡して記事を動的に表示させているのです。
余談ですが、上記URLは一見TUTAYAのサイトにありそうな感じですが、これはJUGEMのサーバに存在しています。
それは何故分かるかといえば、DNSを調べると分かります。
WindowsXPなどでコマンドラインからnslookupを実行してみます。
> roswell.tsutaya.jp
Server: dns01.hoge.co.jp
Address: xx.xxx.xxx.xxx
Non-authoritative answer:
Name: roswell.tsutaya.jp
Address: 210.172.160.45
> 210.172.160.45
Server: dns01.hoge.co.jp
Address: xx.xxx.xxx.xxx
Name: psychiclover.jugem.jp
Address: 210.172.160.45
と、すると、roswell.tsutaya.jpとpsychiclover.jugem.jpはグローバルIPアドレスが同じなので同じサーバだとわかります。
また、、
Netcraftのサイトを利用する方法もあります。Netcraftのサイトにアクセス後、画面左側の「Webserver Search」の欄に、「
http://roswell.tsutaya.jp/」を入力すれば、調査結果が表示されます。
site reportを見てみると、「Reverse DNS」の欄に、sophia-festa.jugem.jp の文字が見て取れるでし造う。NetcraftはWebサーバの種類やサーバのOSなどの情報が簡単にGetできるので、いろいろ便利なので、続えておくとよいかもしれません。
非常に話しが飛びましたが、元に戻すと、クライアントから入力したデータをサーバで処理してHTMLファイルを静的・動的に作成することができるということです。で、それを利用してBlogサイトが作成・公開されてます。
もうひとつ、このページにも貼り付けてありますが、サイトのページカウンターなども動的にサーバで処理されて作られています。
大凡のカウンターサービスはGETメソッドでCGIをよびだしその結果を「画像で」返すような仕組みです。
Webサーバは何か問い合わせがあったときに処理を行って、結果をブラウザに表示しますが、これは「結果をブラウザに表示させるようなプログラムを作成している」からです。通常は、ブラウザはサーバから受け取った結果をHTMLで表示するプログラムが多いですが、送信されたデータを処理して結果を画像として返すことも勿論プログラムの作り方で可能です。
Webサーバは何か問い合わせがあった場合に適切なMIMEヘッダを付加し、標準出力に結果を出力します。
HTML:Content-type: text/html
XML:Content-type: text/xml
png:Content-type: image/png
JPEG:Content-type: image/GIF
ブラウザはこのMIMEヘッダを確認して、「あ、これはHTMLファイルなのだ」とか「あ、これは画像なのだ」と認識して、ブラウザに表示されるのです。
また、誤解している人も多いかもしれないのですが、Webサーバで利用できるプログラミング言語は決まっているわけではありません。
よく、利用されるものとして、
-perl
-PHP
-Active Server Pages
-ColdFusion
-JSP
-Servlet
-ruby
などが上げられますが、これは単によく使われているだけで、何故よく使われているかといえば「Webサーバ上で動作させる際の親和性が高い」からだといえます。つまり、Webサーバ上で動作するプログラムを作りやすいような仕組みやライブラリが揃っているということです。
今回上記に掲載した
HandMail の場合は、入力した文字をサーバで処理してその結果を画像ファイルとして表示するような仕組みになっています。
perlの場合はGDというライブラリが有名です。
japan.linux.comの記事が分かりやすいかと思います。
PHPの場合も標準で利用できるものもありますが、グラフなどを作成する場合は
JpGraphや
PHPLOTなどを利用することが多いようです。このあたりは好みの問題かな?
上記の
HandMail ではどういったアプリケーションで作成されているのかはわからないのですが、このあたりのライブラリを利用しているのではないかと思われる。また、
HandMail では・角英数字文字しか利用できないようであるが、これは、英語圏で作られたライブラリを利用しているため、全角文字のような2バイトコードに対応していないのではないかと思われる。
下記で試してみてはいかがでしょうか?