2013年05月25日

Web Patio(v4.8)のスパム対策コード

一日10件近くあったスパムのポストをうまく駆逐できたので、方法を記しておきます。
Web Patio v4.8にポストされる以下のようなやつですな。

件名:air max pas cher
日時:air max pas cher
参照: http://f55.fr/
内容:Preceptor‘T make an effort over-time, the right circumstances return whilst you least hope these types of. [url=http://f55.fr/]air max pas cher[/url] air max pas cher

 こやつの特徴として、時間帯や内容、IP(プロバイダはおろか国まで)はバラバラ。なかなか嫌らしいヤツです。NGワードで弾くにも限界があります。画像認証導入は利用者にとって面倒くさい。
 ってことで、1バイト英数字記号のみのポストの場合に弾くコードを追加します。以下のとおりです。


regist.cgi
#-----------------------------------------------------------
# 記事投稿処理
#-----------------------------------------------------------
sub regist {

# 投稿チェック
if ($cf{postonly} && $ENV{REQUEST_METHOD} ne 'POST') {
&error("不正なリクエストです");
}

# 権限チェック
if ($cf{authkey} && $au{rank} < 2) {
&error("投稿の権限がありません");
}

if ($in{sub} =~ /^[!-~\s]*$/)
{
&error("スパム防止のため件名欄に日本語の入力を願います。");
}

if ($in{comment} =~ /^[!-~\s]*$/)
{
&error("スパム防止のためコメント欄に日本語の入力を願います。");
}

# フォーム入力チェック
&form_check;
青文字を追加

 件名と本文が1バイト英数字記号のみの場合に弾くコードです。スパムが油断ならないのは、コメント欄で稀に2バイトのアポストロフィーを含むこと。上のサンプルだと、Preceptorの直後です。私が見たところ、件名欄には2バイト文字がありませんでしたので、そちらもチェックしています。NGワードも併用すればほぼスパムを防げるでしょう。





posted by ぷーすけ at 00:12| Comment(0) | プログラミング