xoops (contact)お問い合わせ スパム対策

2017年10月28日

この間、Xoopsの「mylinks」へのスパムが激増したので対策を立てましたが、こんどは「(contact)お問い合わせ」にもスパムが増えてきた。
やっぱり「超ウザーイ」ってなもの。
てなわけで、「お問い合わせ」にも、お手軽スパム対策を導入しました。

2006.12.18 バージョンアップ版公開

変更箇所は2カ所。
modules\contact\templates\contact_contactusform.html
modules\contact\index.php

まずは、「contact_contactusform.html」で、
<form name=”<{$contactform.name}>”・・・
に次の文を追加
<input type=”hidden” name=”sb_showtime” value=”<{php}>echo time();<{/php}>” />

次に「index.php」で、
if ( empty($_POST[‘submit’]) ) {
に次の文を追加
//Spam buster! The post within 3 seconds is invalid.
$sb_after_sec = 3;
if( $_POST[‘submit’] && time() < $_POST[‘sb_showtime’] + $sb_after_sec) die;

最後にモジュールを再インストールして準備完了。
今回は送信されたデータ処理を同じモジュール内で実施しているので、条件式に$_POST[‘submit’]が追加されています。

解説ぅ~~~(前回と一緒だよ~)
簡単に書くと「リンク申し込み画面が開いてから3秒以内に投稿されたものはスパムと判断しちゃうよ」という仕組みです。
人間工学に基づいた(嘘)、お手軽スパム対策。

簡単だけど、効果は抜群。スパム投稿はなくなりました。
スパム投稿はプログラムを使ってされるのが「常識」なので、単純な「3秒ルール」でOK。
3秒以内に入力してしまう人もいるかもしれませんが…。
「判定時間が短すぎる」「長すぎる」という場合は、$sb_after_secの値をイジッてください。

スパムの排除具合を見たい場合は、次のようにすればOK。
if( $_POST[‘submit’] && time() < $_POST[‘sb_showtime’] + $sb_after_sec){
    $handle  = fopen(“spam.txt”,”a”);
    fwrite($handle, date(“Y-m-d H:i:s”).” “.$_POST[“title”].”\n”);
    fclose($handle);
    die;
}
(spam.txtのパーミッションを書き込み可にすることを忘れずに)

2006.12.18 バージョンアップ版公開