昔からプロバイダのスペースで公開しているHPにフリーのCGIを使ってゲストブックを設置しているのだが、ここんところやたらとスパムな書き込みが行われる。削除しても削除してもまた書き込まれて、イタチごっこの繰り返しである。一応簡単な対処(アクセス制限やキーワード制限など)を行ってもみたのだが、最近はますます酷くなる一方で、ゴミとしか思えない書き込みを文字制限数ギリギリまでズラズラと書き込まれてしまう。まともな書き込みがあっという間に過去ログに移されてしまうのでホントに困っている。
更に匿名プロキシ経由で来られると実質やりたい放題。アクセス制限がほとんど意味をなさない状態で、根本的な対処を考えなくてはならないと痛感している。恐らくスパマーは巡回ツール等を使ってプロクシを自動的に書き換えて足跡が残らない様にしているのだろう。ログに残されたIPアドレスや偶に取れるホスト名は全く別物だが同じ文章というのが多々ある。
数ヶ月前からPerlを使ったCGIの勉強を少しだけ始めてみたものの、悲しい事に未だに実用レベルには達していない。本当にプログラミングは難しいというか、私にはセンスが無い様で非常に悲しいところだ。しかしながらやれることはやらないと、と思って「プロキシ経由のIPアドレス」等と言うワード検索を行っていたところ、「生IP」や「IP抜き」等というややアングラっぽい用語を見つけてしまった。httpの他に、ftp,telnetという別の通信手段を強制的に発動させ、プロキシを通っていないその通信ログを取るという技もあるらしい。しかし概念の説明文には行き着いたものの実際のソースを公開しているサイトには出会えなかった。
これを足がかりに行き着いたのが、タイトルの通り「ソケット渡し」というテクニックである。JAVAアプレットを使ったテクニックで、HTMLに<APPLET>タグを埋め込んでおくことが出来れば、JAVAアプレットとCGIの組み合わせで、いわゆる生IPのアクセスログが取れるのだ。詳しい設置手順は書かれていなかったのだが、色々と調べてみたところとりあえず掲示板CGIにアクセスされた時にログを取る事が出来る様にはなった。参考にさせて頂いたのは「SOKET WATASI」というページである。多くのサイトからリンクを張られているので多分このサイトが発祥ではないかと勝手に思ったりした。
備忘録の為にメモしておくと、
- watasi.javaソースコードをダウンロードして、「String host」と「String cgi」の値を、設置環境に合わせてテキストエディタで編集する。その後JAVA SDK環境でコンパイルコマンドを実行する。分かっている人には当然だが知らない人には分かるはずもない。JAVA SDK環境が無いとコンパイル出来ないのだ。(とほほのJAVA入門辺りを参照してダウンロード&環境設定しよう。率直に言ってSUNの説明は英語だし、インストール手順の解説サイトの情報にもかなり違いが生じているので分かりづらかった。所詮SUNはそんなもんだと思っているので自分で調べて頑張るしかない。)
JAVA SDK環境が整ったならば、
c:\tmp\javac watasi.java 等としてコンパイルを実行する。
コンパイルに成功すると
c:\tmp\watasi.class ファイルが生成されるのでffftp等でWebサーバに転送する。 - watasi.cgiをダウンロードしてテキストエディタで開き、「$file」の値(ログファイル名)をお好みに編集する。ファイル名の拡張子は当然ながら .cgi に変更する。Webサーバに設置してパーミッションを705辺りに変更して実行権を加えれば準備OK。
- アクセス記録を取りたいページに何とかして下記の様な<APPLET>タグを埋め込む。Perlスクリプト(cgiファイル)内でも上手く記述すれば実現可能だと思う。
例:<APPLET code="watasi.class" width=600 height=60></APPLET> - 以上で、上記3のタグを書いたページにアクセスされたら、タグを埋め込んだ部分にIPアドレスが表示され、別途watasi.cgiによってログファイルが生成記録される。
正直言って現時点では、JAVAアプレットなんて全く意味が分からない。なんせ今回初めてSDKをインストールして【watasi.classファイル】を生成したのだ。何となく雰囲気は分かったが(一応目的とされる動作もOK)、このテクニックを実践で使うにはどうすればよいか今のところ思いつかない。しばらく考えてみて何とかスパムな書き込みの対策を施したいものだ。


コメント