最近、海外から発信されたプロキシを悪用した掲示板書き込みロボットが猛威を振るっています。 -> Spamの巣窟と化した掲示板

最近、海外から発信されたプロキシを悪用した掲示板書き込みロボットが猛威を振るっています。 -> Spamの巣窟と化した掲示板
| チェック項目 | 値 | 備考 |
|---|---|---|
| 投稿欄の内容 | CMリンクの羅列 | <a>タグ、XMLタグ有り |
| 投稿欄に多く含まれる単語 | cialis, generic, viagra | 3つの単語のうち1つ以上が含まれる割合、ほぼ100% |
| 投稿の周期 | 約30分おき | 途中、活動停止の時間帯有り |
| REMOTE_ADDR | 不特定多数 | 毎回異なる |
| HTTP_ACCEPT | */* | - |
| HTTP_ACCEPT_CHARSET | - | - |
| HTTP_ACCEPT_ENCODING | - | - |
| HTTP_ACCEPT_LANGUAGE | - | - |
| HTTP_USER_AGENT | 数パターン | 改変している |
| HTTP_CONNECTION | Keep-Alive | - |
| HTTP_PRAGMA | no-cache | - |
| HTTP_REFERER | _URL_ | 改変している |
| プロキシ情報 | ほとんど未設定、たまに漏れ串 | 複数 |
ロボットは「送信」ボタンを押下できません。従って書き込む際は、正規のフォームを経由せずに、直接 actionで指定されているURLに送信して来ます。正規のフォームからの送信か否かを判別できれば、ロボットからの書き込みを阻止することができます。
「直接投稿」自体をSPAMだと断定すれば良い訳ですから、環境変数のチェックも必要ありません。「直接投稿」をすべて弾き飛ばします。
一番良い方法は、ランダムでユニークな文字列を発生させ、それを入力してもらう方法でしょう。
次に、投稿者の手を煩わせず簡単な方法はというと、判定用のユニークな項目を前もって設定しておくという手があります。受信プログラム側でこの項目の name と value が一致するかを判断します。一度は悪人や悪行ロボットに取得されるかもしれません。その時は、name なり、value なりを変えてやります。小回りの効かない実行型ロボットは、そう易々とは変更できません。
私の管理している某掲示板では、現在のところユニーク項目1個のみで100%防御しています。弾かれたすべての投稿の解析をしていますが、明らかにこのロボットは日々進化して来ています。
ここまでくると、環境変数の判定では防御不可能です。相手がロボットなら、ロボット対策で解決するのが一番スマートな解決策です。
防御をしたとしても、相手が悪質なロボットだとサーバーの転送量も無視できません。30分おきにアクセスがあるとすると、例え10kbのファイルでも、1日480kb、1ヶ月15Mbもの無駄な転送が発生することになります。
悪質なロボットに対しては、表示量をできるだけを少なくするか、早々にどこかに飛ばしてしまいます。相手のURLが判ればそこに飛ばしてやるのが一番良い方法ですが、そうでなければ、管轄のSPAM取締りURLに飛ばせれば手がかからなくて良いかもしれません。飛ばし先は、相手の迷惑にならないように慎重に設定する必要があります。