続々・スパム撃退! せめて再構築地獄を逃れるために


MovableType 3.2 は 「Spam Fighter」 という
 
 ヤル気満々なコードネームが付いて
 
いるそうですが、私はまだその威力を試していません。移行作業の手間と、
トラブル発生のリスクを考えると、なかなか実行に移せないのです・・・。
 
さて、私は今までに以下のような経緯を経てようやく、ブログ運営に支障が
無い程度にスパムを押さえ込めるようになりました。その最後のエントリでは、
 
■2005/02/08 [スパムコメント対策: URLフィルタを施してみました。
スパムコメント対策: URLフィルタを施してみました。]
■2005/03/23 [スパムフィルタのコードをキーワード方式に変更しました。
スパムフィルタのコードをキーワード方式に変更しました。]
■205/06/07 [トラックバックスパムも撃退せよ! MT用スパム対策コード
トラックバックスパムも撃退せよ! MT用スパム対策コード]
■2005/06/11 [トラックバックスパムも撃退せよ! (続報)
トラックバックスパムも撃退せよ! (続報)]
「同じドメインから連続して10個以上のコメント/トラックバックは受け付けない」
という新しいルールを設け、もしキーワードフィルタをすり抜けた場合でも
個数制限でパンクを防ぐ ようなコードを、更に付け加えました。

という記載だけして、その中身のコードは示していなかったのですが、本日、
 
 「そのコードを教えて欲しい」というメイルを
 
頂戴しました。いや、本当に何の変哲も無い地味なコードなのですが、
念のためここで公開しておきましょう。
 
(インデントと行間が全角スペースになっていますのでご注意ください)
use FileHandle;
 
### 色々ファイル開くね
my $blacklist = "(MTインストールdir)/lib/MT/App/antispam.txt"; #キーワード羅列ファイル。
my $fh = FileHandle->new($blacklist) or die "$blacklist: $!";
my $logfile = "(MTインストールdir)/lib/MT/App/antispam.log"; #ログ吐き用のファイル。
my $fhlog = FileHandle->new(">>$logfile") or die "$logfile: $!";
my $lastfile = "(MTインストールdir)/lib/MT/App/antispam_lasturl.log"; #最新URL保持ファイル。
my $last_count = 10; #最新URL保持数
my $last_alert = 9; #スパム判定閾値

 
my $time_str = localtime(time); #時刻を保持しておくね。
my $tmpurl = $q->param('url'); #これが今回受信したURLね。
 
### 先に最新URL保持ファイルを更新しておくね。
my $fh_last = FileHandle->new("$lastfile") or die "$lastfile: $!";
my @lasturl = <$fh_last>; #全部(10行)読み込んで
$fh_last->close;
$fh_last = FileHandle->new(">$lastfile") or die "$lastfile: $!";
flock( $fh_last, 2);
print $fh_last $tmpurl. "\n"; #最新のURLと残り9行を書き込んどく。
for ( my $i=0; $i<$last_count-1; $i++ ) { print $fh_last $lasturl[$i]; }
$fh_last->close;

 
### キーワードマッチ
while ( <$fh> ) {
  chomp;
  if ( $_ ne "" && $tmpurl =~ /$_/ ) {
    print $fhlog $time_str. "\tTRACKBACK SPAM rejected. url=" .tmpurl. "\n"; # ログファイル記録。
    return $app->_response(Error=> $app->translate("TRACKBACK SPAM rejected.")); # 拒絶!
  }
}
 
### 同ドメイン連続殺人事件
my $match_count = 0; #マッチした数
 
### ドメインを抜き出すね
my ( $tmpurl_domain ) = ( $tmpurl =~ /http:\/\/(.*?)(\/|$)/ );
if ( $tmpurl_domain ne "" ) { #ドメインが抜き出せたら
  for ( my $i=0; $i<$last_count; $i++ ) { #マッチした数を数えてみよう。
    if ( $lasturl[$i] =~ /$tmpurl_domain/ ) { $match_count++; }
  }
}
if ( $match_count >= $last_alert ) { #閾値を超えていたら拒絶!
  print $fhlog $time_str. "\tTRACKBACK SPAM rejected (full match lasturl). url=" .$tmpurl. "\n";
    return $app->handle_error('TRACKBACK SPAM rejected.');
}

 
### 通りました。おめでとう!
print $fhlog $time_str. "\ttrackback accepted. url=" .$tmpurl. "\n";

こんな風に、最近受けたトラックバックのURLを10件くらいファイルに保持
しておけば、同じURLからの連続送信を感知してブロックすることができます。
これで antispam.txt にセットしていない新顔のURLに襲撃されても、
被害を最小限に食い止め、再構築の嵐から逃れることができるでしょう。
 
もっとスマートなやり方もあるかと思いますが、まずは応急処置、応急処置(・▽・)ノ


2005/10/06 [updated : 2005/10/06 23:59]


この記事を書いたのは・・・。
CK@デジモノに埋もれる日々 @ckom
ブログ「デジモノに埋もれる日々」「アニメレーダー」「コミックダッシュ!」管理人。デジモノ、アニメ、ゲーム等の雑多な情報をツイートします。




« フィルムをデジカメで撮影してしまえ! スライドデジコピア

トップに戻る

コメント/TBスパムとの戦い - URLキーワードマッチ方式の戦果 »


▼ はてなブックマークのコメント ▼



2021年あけましておめでとうございます。よろず話はレンタカーと「一脚」テスト。


2020年も大変お世話になりました。2021年も宜しくお願いいたします。


2020年あけましておめでとうございます。今年はちゃんと歯を磨きます。。。


2019年も大変お世話になりました。2020年も宜しくお願いいたします。


2019年あけましておめでとうございます。・・からのいきなりノートPC修理のお話


2018年も大変お世話になりました。2019年も宜しくお願いいたします。


デジ埋のブロガー名刺ver.3.1を前川企画印刷さんに作っていただきました。


2018年あけましておめでとうございます。今年は「積んデジ」を減らす・・?


2017年も大変お世話になりました。2018年も宜しくお願いいたします。


2017年あけましておめでとうございます。新年はモニタトラブルから始まります。


2016年も大変お世話になりました。2017年も宜しくお願いいたします。


2016年! あけましておめでとうございます!

ピックアップタグ




ブログ内検索



▼ コメント ▼

ご自由にコメントください(=゜ω゜)ノ
※管理人は多忙のためお返事はほとんどできません(スミマセン)。
スパムおよび本文と無関係なコメントは削除対象になる可能性があります。


保存しますか?




★コミックダッシュ! 10,000人突破ありがとうキャンペーン!(9/18~10/23)
 
デジモノに埋もれる日々 : (C) CKWorks