2006年06月29日

nicky! スパムブロックその2

nicky! のコメント欄の名前、URI、コメント本文にそれぞれNGワードを設定する仕組みを作ってみました。

1)block.cgiを設置
block.lzhをダウンロード
解凍するとblock.cgiが出てきます。
block.cgiの1行目のPerlのパスを自分の環境に合わせて、nicky.cgiと同階層に設置してください。
パーミッションは705で動くはず。

2)nicky.cgiの末尾(#end of scriptの直前あたり)にでも、下記のサブルーチンを追加します。
sub spam_check {
my $name = $_[0];
my $uri = $_[1];
my $comment = $_[2];
my $spamdata = 'spamlist.cgi';

# NGリストにある文字列を弾く
open (DATA, $spamdata);
my @data = <DATA>;
close (DATA);
foreach (@data) {
chomp;
my ($ID, $type, $text) = split ("\t", $_);
if (($type eq 'Name') and ($name =~ /$text/)) {
return 0;
}
if (($type eq 'URI') and ($uri =~ /$text/)) {
return 0;
}
if (($type eq 'Comment') and ($comment =~ /$text/)) {
return 0;
}
}
return 1;
}


3)サブルーチン「NickyInputComment」の中の、コメントを書き込む部分を下記のように書き換えます。

if( ($CommentMsg =~ /\x01/) || ($CommentName =~ /\x01/) ){
$ille = 1;
}else{
$ille = 0;
open (WDC, ">>$NickyComment");
binmode (WDC);
print WDC "$CommentName\x02$CommentURI\x01";
print WDC "$CommentMsg\x01";
print WDC "$cdate\n";
close (WDC);
}


my $spamcheck = 0;
if( ($CommentMsg =~ /\x01/) || ($CommentName =~ /\x01/) ){
$ille = 1;
}else{
# NGワードチェック
$spamcheck = &spam_check ($CommentName, $CommentURI, $CommentMsg);
if ($spamcheck) {
$ille = 0;
open (WDC, ">>$NickyComment");
binmode (WDC);
print WDC "$CommentName\x02$CommentURI\x01";
print WDC "$CommentMsg\x01";
print WDC "$cdate\n";
close (WDC);
}
}

なお、すでにnicky! スパム対策とコメント通知のカスタマイズを実装済みの場合は、
my $spamcheck = 0;
if( ($CommentMsg =~ /\x01/) || ($CommentName =~ /\x01/) ){
$ille = 1;
}else{
# ASCIIチェック
$spamcheck = &ascii_check ($CommentMsg);
# NGワードチェック
if ($spamcheck) {
$spamcheck = &spam_check ($CommentName, $CommentURI, $CommentMsg);
}
if ($spamcheck) {
$ille = 0;
open (WDC, ">>$NickyComment");
binmode (WDC);
print WDC "$CommentName\x02$CommentURI\x01";
print WDC "$CommentMsg\x01";
print WDC "$cdate\n";
close (WDC);
}
}

みたいな感じで。

4)block.cgiにアクセスして、NGワードを登録
「名前」「URI」「コメント」のそれぞれに対して排除文字列が登録できるようになっています。
登録したリストは「spamlist.cgi」に記録されていて、nicky!にコメントが来たとき、このリストを読み込んでチェックをかけるという仕組み。

※改造は自己責任でどうぞ。一応、自分で設置したnicky! で試してはいますが、この改造を行った結果について責任は負えませんのであしからず。
また、改造方法について個別の質問もご遠慮くださいませ。
posted by 文月夕 at 10:40| Comment(6) | TrackBack(2) | blog | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして.スパムブロック対策の参考にさせていただいています.

サブルーチンspam_checkについてなのですが,0009行目の
my @data = ;
は,おそらく
my @data = <DATA>;
の誤植ではないでしょうか.

ちょっと気になったので,投稿してみました.
Posted by Quvota at 2006年08月13日 17:30
おっと,
my @data = &lt;DATA&gt;;ですね,失礼しました.

(誤植というより,ブラウザの解釈の問題でした.早計な書き込み,申し訳ありません.
Posted by Quvota at 2006年08月13日 21:07
>Quvota さま
ご指摘ありがとうございます。返信が大変遅くなってしまって申し訳ありません。

「<」をそのまま書いてしまったので、ブラウザに中身が表示されていませんでした。失礼いたしました。
Posted by 文月夕@管理人 at 2006年09月05日 12:57
お世話になります。eguyanと申します。

上記サブルーチン「NickyInputComment」の書き換えの部分で、0006行目の
$spamcheck = &spam_check ($CommentName, $CommentURI, if ($spamcheck) {
は、明らかに文字列が中途で欠落していますね。
ちなみにこちらの予測で、0006,0007行目を、
$spamcheck = &spam_check ($CommentName, $CommentURI, $CommentMsg);
if ($spamcheck){
としてみたら、とりあえずうまく動いたようです。

この辺で少々戸惑いはしましたが、この機能自体には大変感謝しています。大事な追加機能を開発頂きまして、ありがとうございました。
Posted by eguyan at 2006年11月20日 00:26
>Quvotaさま
前のレスがおかしくなっていたことに今気づきました。すみません。
エントリを書いた際に、「<」の半角をそのまま書いてしまったので、タグの開始記号と認識されて表示されなくなってしまっていました。現在は修正済みです。

>eguyanさま
おっしゃるとおりのミスです。さっそく修正いたしました。
ご指摘ありがとうございました!
Posted by 文月@管理人 at 2006年11月20日 23:35
スパム対策利用させていただきました。
nicky自体古いですが、気に入ってるので今でも使ってます(^^

が、しかしコメントスパムが多くなってきたので、
活用させていただきました!
ありがとうございます!!(^^b
Posted by Tami at 2015年02月04日 10:11
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

nickyカスタマイズ(自己責任版)
Excerpt: #個人的なカスタマイズです。nicky作者様に質問しないで下さい
Weblog: さなりずむ
Tracked: 2006-06-29 23:17

Nicky!関連メモ
Excerpt: 文月夕さんが6/29にnicky! のコメント欄の名前、URI、コメント本文にそれぞれNGワードを設定する仕組みを公開。
Weblog: なにもないとこ
Tracked: 2006-06-30 21:04

PR

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。