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

2005/10/06

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キーワードマッチ方式の戦果 »


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



2024年のご挨拶


全力Vの1年:2023年振り返り~2023年も大変お世話になりました。2024年も宜しくお願いいたします。


2023年あけましておめでとうございます。デジモノに埋もれる様子をお届けできない日々


"V"にハマった1年:2022年振り返り~2022年も大変お世話になりました。2023年も宜しくお願いいたします。


(状況のご報告)Twitterアカウントの状況について ※2022.11.08追記あり


連投メモ:「ツイートで『ブログ』を書く」お話と、ガジェット系からイベントレポ系に遷移していった時のお話


2022年あけましておめでとうございます。よろず話はカーナビの「ジャイロ」ご乱心のお話


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


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


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


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


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

ピックアップタグ




ブログ内検索



▼ コメント ▼


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