OXY NOTES

人気の画像掲示板「JoyfulNote」でスパム対策を追加

まだまだ書き込みもスパムも現役です

掲示板という表現自体が古めかしく感じる昨今、隔世の感さえ抱きますが、まだまだ現役で使用しています。
当方で管理しているアクアリウムWikiではWiki編集の手間を考慮して、画像掲示板へのアップロードにも対応しています。

JoyfulNoteはデフォルトで多くのスパム対策をしていますが、残念ながら対策を取り入れてもスパムとのイタチごっこです。
やはり自分のサイト限定の対策を加えるのが一番です。


JavaScriptが有効かチェックする

スパムは専用のツールで機械的に書き込むため、JavaScriptを解釈して実行するという機能を実装していないことがほとんどです。
そこでフォームに非表示の項目を作り、JavaScriptでテキストを入れ込みます。

その値をバリデーションするという仕組みです。

tmpl/bbs.htmlのhead部分に追加

<script type="text/javascript">
setTimeout(function(){
	var hidden = document.getElementById('hidden');
	hidden.value = 'BOT対策';
}, 5000);
</script>

同じファイルのformの部分に追加

<input type="hidden" id="hidden" name="hide" value="">

regist.cgiの490行目あたりフォーム入力チェックに項目を追加

if ($in{hide} ne "BOT対策") { $err .= "JavaScriptを有効にしてください<br>"; }

JavaScriptでidがhiddenの項目に「BOT対策」という文字列を追加します。
これでJavaScriptを解釈できないBOTの書き込みは排除できます。

また実行を5秒遅らせることで高速で機械的な書き込みを排除しています。どんな掲示板の達人でもページを開いてから5秒で書き込みをする人はいないと思います。

人間でもJavaScriptが無効の場合を考慮してエラー時のメッセージでJavaScriptを有効にする由を伝えます。


入力を禁止するtextareaを追加

上の対策に加えて、非表示のtextareaを追加します。
textareaはBOTがリンク等を書き込みを行いたい項目なので、必ず何かしらの書き込みを行います。逆に言えばtextareaに項目を入力しないBOTは無意味。

tmpl/bbs.htmlのform部分に追加

<textarea id="hoge" name="comment2" style="display:none;">

regist.cgiの490行目あたりフォーム入力チェックに項目を追加

if ($in{comment2} ne "") { $err .= "不正な操作<br>"; }

通常のtextareaをcssで消しています。これが表示か非表示かというのはBOTには解釈が難しいと思います。
今回は項目が空でない場合は「不正な操作」というエラーメッセージになります。

人間では非表示の項目に値を入力することはできないので、このエラーメッセージは人間が見ることはありません。そのため意味のない文字列でも構いません。


上記の設定をしてから数日経過していますが、スパムは1件も書き込まれていません。

対策をした掲示板も紹介しておきます。
アクアリウムWiki画像掲示板