xoops mylinks スパム対策

2017年10月28日

2週間ほど前から、相互リンクとして利用している「mylinks」へのスパムが激増。
アダルトオンリーで、「超ウザーイ」ってなもの。
削除しても削除しても1時間に一度の割合で書き込まれるので、キリがない。

いっそのことmylinks使うの止めようかと思ったけど、正しく相互リンクを申し込んでくれるもいるだろうから、単純に受付禁止にするわけにもいかない。

というわけで、お手軽スパム対策を考えてみた。

変更箇所は2カ所。
modules\mylinks\templates\mylinks_submit.html
modules\mylinks\submit.php

まずは、「mylinks_submit.htm」で、
<form action=”submit.php” method=”post”>
に次の文を追加
<input type=”hidden” name=”sb_showtime” value=”<{php}>echo time();<{/php}>” />

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

最後にモジュールを再インストールして準備完了。

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

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

スパムの排除具合を見たい場合は、次のようにすればOK。
if(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のパーミッションを書き込み可にすることを忘れずに)