遊星ゲームズ
FrontPage | RSS


掲示板のコメントスパム対策
 プログラム

 以前も書いたけど、そのページは事故で消えましたorz
 数ヶ月たつけど荒らしにはあってないので、方法を紹介だけします。

 まず、スパムは人間ではありません。ロボットです。なので、ちゃんと理解して対策をとれば防ぐことができます。まだまだロボットでは人間さまにかなわないのです。
 スパムがロボットであるという前提に立って考えてみます。ロボットはどうやって、コメントフォームを捜すのでしょうか?
 Googleのクローラーと同じ。リンクを辿ってやってくるのです。そして、まあ単純に考えて、formタグを捜すのでしょう。
(あくまで推測)
 というわけで、ロボットに対抗するために考えられる方法は↓。

  • フォームを、ロボットには見えないようにする

 とそんなことを考えて、このサイトでとってる方法。
 フォームタグをHTML中に書きません。Javascriptのdocument.writeで書きます。

 PHPでやる場合のソース↓。

<div id="hoge">ふぉーむ</div>
<script type="text/javascript">
	document.getElementById("hoge").innerHTML = "<?
ob_start();
?>
フォームをここに書く
<form ……
	……
</form>
<?php
$h = ob_get_contents();
ob_end_clean();
$h = preg_replace_callback(
	'/[<"\'>&aiueo\n\r\\\\]/' , 'ordChar' , $h);
echo $h;
?>";
</script>
<?php
function ordChar($matches)
{
	return '"+String.fromCharCode(' . ord($matches[0]) . ')+"';
}

 HTML特殊文字と、\とあとてきとうに何文字かを

String.fromCharCode()
 に変換。これで、formという単語すらなくなります。ロボットでは、フォームがあることがわかりません。
 もっとも、ロボットがJavascriptを解釈しはじめたら別。そうなったら別の方法を考えるしかない。
 この方法の欠点は、すでにスパムサーバのDBに登録されてしまっているページでは効かないかもしれないというところ。まあ、そういうDBがあるのかどうかは知らないけど。

 もちろんほかにも方法はある。

  • 「半角英数のみで、URLが含まれる投稿」をNGとする
     以前ここで使ってた方法。効くけど、でもこれじゃあ、外国人を排除してしまう。あと、近ごろは韓国からのスパムとかも増えてるらしい。
  • サイト全体で投稿コメントに含まれるURLを集計し、頻度の高いものをNGとする
     はてなはこんな方法らしい。すごく大きなサイトでしかできない。
  • コメントフォームへのリンクにJavascriptを仕込む
     ただのaタグじゃなくて、onclickでページ遷移させる。理屈としてはこのサイトの方法と同じ。
  • コメントにログイン(またはワンタイムパスワード)が必要
     確実だろうけどユーザビリティを犠牲にしてる
  • IP制限
     こういうめんどくさい方法は本質的にダメだと思うけど……、まあ効くのは確かだろう。

掲示板のコメントスパム対策を