サーバ

Pebble – JavaScript でコメントスパム対策 Round 2

Pebble – コメントスパム対策
・Pebble – コメントスパム対策 Round 2
Pebble – トラックバックスパム対策

先日 JavaScript の埋め込みでロボットのスパムコメント対策をしました。
毎日60〜100件のスパムコメントがあったのが、大幅に減りましたがその後も多いと日に10件程度の投稿があります。
コメントをくださっているのは以下の6人の方々。
Jeff : simpsons@yahoo.com
Andreos : support@greenworld.com
Pharmacy : john1980@hotmail.com
Andreos : support@greenworld.com
Online : lover87@mail.ru
Loan : gorodok@hotmail.com

考えられる理由は3つくらいあります。
1. スパム業者が対策を施した
非常にシンプルな防止策なので、JavaScript は解釈しなくても正しい POST 先さえ人間がロボットに教えてあげれば投稿できます。
しかし費用対効果を考えるとウチのサイトごときに特化した対策をいちいち施すことは考えにくいです。

2. JavaScript を解釈するロボットがいる
本当だとすればやはり JavaScript による対策は本格的なCAPCHAにはかなわないということでしょう。
しかし、技術上無理な話ではありませんが、そこまで凝ったロボットをいちいちスパム業者が作るとは考えにくいです。
何しろ非常に安いコストで大量のメッセージをばらまけるというスパムの本筋から離れてしまいますから。

3. POST 先の URI をキャッシュしている
毎回 HTML をクロールしてコメント投稿の URI をパースするのはスパム投稿のスループット上効率が悪いです。
単位時間あたりのスパム投稿数をあげるには前回スパム投稿が成功した URI をキャッシュしておく実装が考えられます。

というわけで、現実的には 3. が正解ではないかと思います。
なのでコメントの投稿先の URI を変えてまた様子を見ることにします。
目指すはコメント投稿をする人間に負担を掛けないスパム対策!
#とはいえ人間からのコメントはあんまないんですが・・・。トホホ

で、Pebble ではコメント投稿に使うパスは classes/action.properties で指定されているので以下のようにテキトウに書き換えて、対応する JSP(common/jsp/commentForm.jspf) も修正して再デプロイすれば Ok です。
< 11: addComment=pebble.controller.action.AddCommentAction
> 11: noSpamAddComment=pebble.controller.action.AddCommentAction

これでもダメなら JavaScript を解釈するロボットがいる可能性が高いでしょう。
それはそれで対策を考えてありますが・・・。
スパム業者との知恵比べのようでなんだか楽しくなってきました。

追記 12/26:
この対策以降コメントスパムは来なくなりました。