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
日時: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;
青文字を追加# 記事投稿処理
#-----------------------------------------------------------
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ワードも併用すればほぼスパムを防げるでしょう。