続々・スパム撃退! せめて再構築地獄を逃れるために
2005/10/06MovableType 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]

ブログ「デジモノに埋もれる日々」「アニメレーダー」「コミックダッシュ!」管理人。デジモノ、アニメ、ゲーム等の雑多な情報をツイートします。
@ckom をフォローする
![]() « フィルムをデジカメで撮影してしまえ! スライドデジコピア | ![]() トップに戻る | ![]() コメント/TBスパムとの戦い - URLキーワードマッチ方式の戦果 » |
▼ はてなブックマークのコメント ▼
関連記事
ピックアップタグ
- アニメ(438)
- GSR(314)
- ライブ(77)
- イベント(203)
- コラボカフェ(35)
- VTuber(21)
- アニメ吐き出しメモ(10)
- ウマ娘(49)
- 舞台挨拶(45)
- 先行上映会(19)
- トークショー(20)
- バンドリ!(51)
- ガールズ&パンツァー(59)
- 少女☆歌劇レヴュースタァライト(60)
- ゾンビランドサガ(9)
- プリンセス・プリンシパル(19)
- スタリラ(31)
- コラム(171)
- ゲームプレイ日記(69)
- ワンフェス(12)
- コメンタリー上映(7)
- 岩浪美和(25)
- 大洗(9)
- 響け!ユーフォニアム(12)
- リズと青い鳥(9)
- RAISE A SUILEN(10)
- 艦これ(23)
- ストライクウィッチーズ(23)
- メイドインアビス(8)
- BLAME!(8)
- ヤマノススメ(7)
- ラブライブ!サンシャイン!!(11)
- HELLO WORLD(6)
- 宇宙よりも遠い場所(5)
- ヴァイオレット・エヴァーガーデン(8)
- 私に天使が舞い降りた!(9)
コメントしましょう