Category : BLOGいじり
2006-03-15

さようならコメントスパム・・・となるかどうか

MovableTypeを使用していたときに散々苦しんだコメントスパムですが、
とうとうSereneBachにも魔の手が伸びてきた模様。
公開こそしてないけど
ウチも毎日スパムが飛んできます。
最初はちまちま消してたんだけど、
こないだ1日に10件を超えたので、こりゃ(´Α`)ウゼーヨと。
消すのは別にいいけど、
いちいちそいつらにコメントのidが割り振られちゃうから、
あとで消すといろいろめんどくせー。
だもんで、対策をとることにいたしました。
ちょうどいいことに、SB向けのコメントスパム対応ツールを
見つけたので、採用させていただくことにしました。
■IPスパムフィルター
コンピュータ関連の備忘録さんありがとう。
以下、自分メモ。


1)以下開発者さんのブログより、ツールをダウンロード
  http://www.j-pca.com./blog/page/IPFilterPulsSet_mod.zip
2)ipcheckフォルダ内の以下CGIファイルを編集
  ・list.cgi
  ・settei.cgi
  ・logchk.cgi

1行目
#!/usr/bin/perlを自分の環境に合わせる(じょりはそのまま)

パスワード
$pass = ‘ここに入力’;

文字コード
$moji = ‘EUC-JP’;
(UTF-8の場合は該当ブログを参照のこと)

3)ipchk.cgiを編集

1行目
#!/usr/bin/perlを自分の環境に合わせる(じょりはそのまま)

4)アップロード
【ディレクトリ構成例】

blog / (ブログのカレントディレクトリ)
├ sb.cgi
├ ipchk.cgi [755]
├─ ipcheck / [755]
│ ├ list.cgi [755]
│ ├ settei.cgi [755]
│ ├ logchk.cgi [755]
│ └ 他のファイル [666]
├─ lib /
│ ├ sb.pm
│ ├ IP_Base.pm [644]
│ ├─ sb /
│ │ └ Receipt.pm [644](※5で修正!)
│ ├─ resource /

5)動作チェック
ipchk.cgiを走らせてみて動作チェック
→全ての項目にOK!の表示があれば問題ナシ
6)Receipt.pmの編集

46行目の「 @ISA = qw( sb::App ); 」の下に IP_Base.pmの使用を宣言
use sb::App ();
@ISA = qw( sb::App );
use IP_Base;

コメントスパム対策(投稿拒否設定)
207行目あたり

eval { # error check
die("error_no_comment\n") if ( $com{’body’} eq ” );
die("error_banned\n") if ( $entry->acm == 0 );
die("error_no_entry\n") if ( $entry->stat == 0 );
die("error_banned\n") if ( !&_check_ip($cgi->value(‘_addr’)) );
die("error_doubled\n") if ( &_check_redundancy_for_com(\%com,@objs) );
};

↓以下のように変更

eval { # error check
die("error_no_comment\n") if ( $com{’body’} eq ” );
die("error_banned\n") if ( $entry->acm == 0 );
die("error_no_entry\n") if ( $entry->stat == 0 );
die("error_banned\n") if ( !&_check_ip($cgi->value(‘_addr’)) );
die("error_doubled\n") if ( &_check_redundancy_for_com(\%com,@objs) );
## IP Spam Filter Start_!
my $ctp = 1;
if (IP_Base::_allow_mail_address($com{’mail’},’./ipcheck’) == 1){ $ctp = 4; }
die("error_banned\n") if (IP_Base::_check_ip_base($com{’host’},’./ipcheck’,$ctp,’CM’)==0);
## IP Spam Filter End_!
## Japanese Hiragana Check Start_!
die("error_no_comment\n") if ($com{’body’} !~ m/(\xA4[\xA1-\xF3]){2}/);
## Japanese Hiragana Check END_!
};

トラックバックスパム対策
135行目あたり

eval { # error check
die(PING_ERROR_NO_URL) if ( $tb{’url’} eq ” or !&_check_url($tb{’url’}) );
die(PING_ERROR_DENIED) if ( $tb{’body’} eq ” or $tb{’body’} =~ /^\s*$/ );
die(PING_ERROR_DENIED) if ( $entry->atb == 0 );
die(PING_ERROR_DENIED) if ( $entry->stat == 0 );
die(PING_ERROR_DENIED) if ( $cgi->value(‘_refe’) ne ” );
die(PING_ERROR_DENIED) if ( !&_check_ip($cgi->value(‘_addr’)) );
die(PING_ERROR_DENIED) if ( !&_check_agent($cgi->value(‘_agnt’)) );
};

↓以下のように編集

eval { # error check
die(PING_ERROR_NO_URL) if ( $tb{’url’} eq ” or !&_check_url($tb{’url’}) );
die(PING_ERROR_DENIED) if ( $tb{’body’} eq ” or $tb{’body’} =~ /^\s*$/ );
die(PING_ERROR_DENIED) if ( $entry->atb == 0 );
die(PING_ERROR_DENIED) if ( $entry->stat == 0 );
die(PING_ERROR_DENIED) if ( $cgi->value(‘_refe’) ne ” );
die(PING_ERROR_DENIED) if ( !&_check_ip($cgi->value(‘_addr’)) );
die(PING_ERROR_DENIED) if ( !&_check_agent($cgi->value(‘_agnt’)) );
## IP Spam Filter Start_!
my $uhk = IP_Base::_allow_url_domain($tb{’url’},’./ipcheck’);
die(PING_ERROR_DENIED) if (IP_Base::_check_ip_base($tb{’host’},’./ipcheck’,$uhk,’TB’,$tb{’url’})==0);
## IP Spam Filter End_!
## Japanese Hiragana Check Start_!
die(PING_ERROR_DENIED) if ($tb{’body’} !~ m/(\xA4[\xA1-\xF3]){2}/);
## Japanese Hiragana Check End_!
};

これで海外サーバ経由のものと、
英数のみの投稿はシャットアウトできるはずだよ。
またダメなら対策考えよ。

Tags: Comments Closed 

関連記事