スパム対策

最近スパムに荒らされている掲示板をよく見かけます。特定のリモートホストIPアドレスからの投稿を禁止する方法は、全く効果がありません。スパマーは毎回、それらのアドレスを変えて攻撃してくるからです。どうにかならないもんでしょうか。
禁止ワードを設定できる掲示スクリプトなら、"http://"を禁止ワードにするだけでほとんどのスパムを防止できます。"http://"で始まるURLへの誘導がスパマーの目的だからです。ただし、この方法では善意の利用者をはじいてしまうかもしれないので、"http://"の代わりに"url://"や"address://"などと書いてもらい、スクリプト内部で"http://"に置き換えるなどの回避策が必要です。

英文スパムを完全防止するのも簡単です。メッセージ本文が英数字のみで書かれ、マルチバイト文字(漢字や平仮名など)が使われていない投稿を、一律にスパムと見なして投稿を受け付けないようにすればいいのです。たとえば、私が実際に使っているスクリプトでは、

if (($in{name} =~ /^[\x00-\x7f]*$/) && ($in{text} =~ /^[\x00-\x7f]*$/)) { &redirect; }

として、投稿者名とメッセージ本文が英数字のみの投稿は無視しています。この方法では善意の英文投稿者や、日本語入力ができないためローマ字で投稿しようとする利用者をはじいてしまう欠点があります。

トラックバックスパムへの対応では、やや複雑な方法になりますが、トラックバック元の記事にトラックバック先のURLを含まない場合、それをスパムと見なして受け付けない方法があります。Movable Typeではすでにプラグインが発表されています。

他になんか思いついたら付け足します。