以前も書いたけど、そのページは事故で消えました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があるのかどうかは知らないけど。
もちろんほかにも方法はある。