Serene Bachのスパム対策を色々やってきましたが、結構TBスパムは既にスパマーに登録されてしまったsb.cgiからリネームさせ.htaccessでUserAgentを指定し弾くことで98%は弾けるようになりました。残りの2%は普通に関係のないTBを送ってくるスパマーなのでそれはたいしたcgiへの負荷にはならないから良しとしましょう。
さて、次はコメント。コメントも同じように個別にcgi名を変え新たに設置して.htaccessでpost攻撃を遮断すればいいのでしょうけれどそこまでしてしまうと一般の方や海外在住日本人の方からのコメントまで弾きかねません。それにcgiを一杯設置してもなんだっけ?と私のようなずぼらな性格の場合忘れてしまいそうなので増やすのはtb用にとどめておき、コメントは通常のcgiを使っておきたいわけです。しかし、コメントフォームには見事にsb.cgiのパスが挿入されます。もちろんこれがないとコメントが受け付けられなくなるのですが、Formに書いてあるとスパマーにばれてしまいダイレクトにpost攻撃でコメントスパムの嵐になります。
そこで、要するにFormソースの中にコメント受信するためのcgi名が無ければスパマーが自動で収集する事が出来なくなるわけです。そんなこんなでJavaScriptでForm内のcgi名を隠すことにしました。色々SB系サイトさんでは利用されている方もいらっしゃるようですね。
私がやった方法
*すでにスパムコメントが多数来ている場合は以下の方法をやっても何の解決にもならないのでまずはcgi名を変更し、ついでにこの方法もやっておくとスパマーにばれにくいのでオススメです。
まずTemplateの個別entry用の<head></head>内に以下の用に挿入。
<script type="text/javascript">
//<![CDATA[
function submitMsg(obj) {
obj.action = ‘{site_cgi}’;
obj.submit();
}
//]]>
</script>
次にコメントフォーム部分を以下のように修正。
<form action="{site_cgi}" method="post">
の{site_cgi}を削除。
次にForm内に以下の部分を記述
onSubmit="javascript:submitMsg(this);"
するとこんな感じになります。
<form action="" method="post" onSubmit="javascript:submitMsg(this);">
これにより先ほど<head></head>内に記述したJavaScriptが呼び出されFormにちゃんとcgiが有るように動作します。ちなみにコメント投稿者がJavaScriptをonにしていないと投稿が出来なくなるので注意が必要です。
これによって以前書いたTBをcgiリネームで.htaccess使いUserAgentで弾くのと合わせて管理画面の拒否設定にあるスパムは破棄する設定をOffにしていても到着するSpamは限りなく0になりました。しかしこれもいつかは解析されてしまうと思うのでしばらくはこの方法って言った所でしょうかね。でもスパム0ってなんか嬉しい。sb.cgiの負荷が凄まじかったのでちょっと安心です。
コメント