Monthly Archives: 1月 2007

WEBサイトのスパムメール対策

WEBサイトを運営して、一番ありがたいのが読者からの反応=メールによる連絡です。当サイトも全く個人的なグループ内専用だった頃は検索ロボットを拒否して素直にメールアドレス(フリーメール)を公開していたのですが、サイトをブログ形式に変更したと同時に積極的にロボットを受け入れるようにした結果、徐々にスパムメールが来るようになりました。

そこでまず取った対策が、メールアドレスを非公開にし、よくあるメールフォームでメールを受け取る方法。でも簡単だけど、専用ソフトによる自動投稿への対策は出来ないので、WEBで管理出来るようなフリーのCGIを利用するようになりました。もちろんちょっとだけ改造して。見かけはメール投稿フォームですが、実際はBBSへの投稿になっています。すなわち、私が外出中でも、BBSに返信書き込みをすれば、返信メールを送信するようになっています(この部分が私のオリジナル改造)。

しばらくは良かったんですが、来ました!専用ソフトによる自動投稿のスパム。内容的には全く意味のない単なる悪戯?嫌がらせ?なんですが、うっとうしいことには違いない。私への技術的挑戦と受け止め、技術的に対策する事にしました。罠を仕掛けてデータ収集した結果、自動投稿ソフトは直接CGIへデータを受け渡すことがわかったため、
-IPアドレスを監視し、フォームを開いたIPアドレスと投稿したIPアドレスが異なる場合はエラーとする
-投稿IPアドレスが空欄(匿名proxy利用)の投稿はエラーとする
-フォームを開いた時間と投稿した時間を監視し、その差がやけに長いか無限大などあり得ない場合はエラーとする(自動投稿ソフトは直接CGIへデータを渡すため無限大になる)
これらの対策を施しました。よくあるIPアドレスを指定して拒否することは、簡単ですがはっきり言って全く無効です。IPアドレスの偽装は簡単ですから、相手は匿名proxyなどを使ってランダムなIPアドレスで攻めてきます。匿名proxyを使った手動投稿の多くは上の2つで回避出来ましたが、その後専用ソフトを使ったと思われる連続投稿に攻められ、3つ目の対策を行いました。これは効果てきめんで、先日までは完全にシャットアウト出来ておりました。

ところが、これを上回る投稿が出現。繰り返して書きますがCGIで書いた投稿フォームで、上記の対策をすり抜けて投稿してくる強者です。すなわち、投稿するための画面を開き、さらに数秒後にフォームにコメントを書いて投稿してくるんです(もしかしたら、本当に手作業で投稿しているのかもしれませんが)。これこそ、私への技術的挑戦!さらに、簡易的ですが対策を追加する事にしました。
-メールアドレスをチェックし、@.***形式以外はエラーとする(実は恥ずかしながら、あり得ないメールアドレスも受け付けていました)
-投稿本文が英語のみの投稿をエラーとする
これで、海外からの投稿はほぼシャットアウトされると思います。

蛇足ですが、スパム投稿対策の王道である禁止ワードチェックは、使わせて頂いているフリーのCGIが元々対応しておりました。不思議ですが、今のところ、そこに引っかかる投稿はないんですよね。コメントが数文字の、明らかに無意味な投稿が来るんです。これが、私への挑戦状と受け止めている大きな理由なんですが・・・。ホントは、数文字の投稿を無視するのが一番簡単だし、文字も決まってるからその文字を禁止ワードで拒否するのがもっと簡単なんですが。

スパム投稿対策のアルゴリズムを公開するのは手の内を明かすようでやめていたのですが、スパム投稿はほとんどが英語だから日本語で書いても読めないだろうし、黙って対策するより、同じことで困っている人がたくさんいるので、公開することにしました。罠を仕掛けてログを取れば思いつく簡単なアルゴリズムですから、隠すほどのことでもないですしね。困っているみなさん、あなたのBBSのCGIにも実装して下さい。

※ロボット検索用に書いておきます。当初の対策で拒絶出来たワードは”abc123″、それで回避出来ない強者のワードは”Hello world”。試しに前者でググってみて下さい。連続投稿され、手に負えず放置状態になっているBBSが大量に見つかる事でしょう。逆に言えば、スパム対策を行っていないBBSを淘汰するためにやってるのかな?そんなことを考えつつ上記ワードで検索してますが、まだそれらの解説ページは見つかっていません。誰も書いてない事が、私がこの記事を書く事にした理由の1つなんですが。誰か情報下さい!