完全にブロックはできていないのですが、だいぶ減らせたので、ご紹介しときます。
それからついでに、コメント通知メールにコメントの内容を記載するようにしてみました。
【スパムブロック】
1)nicky.cgiの末尾(#end of scriptの直前あたり)にでも、下記のサブルーチンを追加します。
# ASCIIコード以外が含まれていると1を返す
sub ascii_check {
$string = $_[0];
my $spamflag = 0;
if ($string =~ /[^\x20-\x7E]/) {
$spamflag = 1;
}
return $spamflag;
}
2)サブルーチン「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{
# ASCIIチェック
$spamcheck = &ascii_check ($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 );
}
}
2)サブルーチン「NickyInputComment」の中の、メールを送信する部分を下記のように書き換えます。
if( $mtap && $mto ){
を
if( $mtap && $mto && $spamcheck ){
【メールにコメント内容を記載】
1)jcode.plを入手して、nicky.cgiと同じディレクトリに入れます。(わかる人は別ディレクトリのものを参照してももちろんOK)
2)サブルーチン「NickyInputComment」の中の、メールを送信する部分を下記のように書き換えます。
open(PIPE, "|$mtap -t -Fnicky!");
if( $error == 0 ){
print PIPE "To: $mto\n";
print PIPE "Subject: nicky!Notice ReciveCommentMessage\n\n";
print PIPE "Recieve Date : $cdate\n";
print PIPE "from : $ENV{REMOTE_HOST}($ENV{REMOTE_ADDR})\n";
print PIPE "agent : $ENV{HTTP_USER_AGENT}\n\n";
print PIPE "http://$ENV{HTTP_HOST}$ENV{SCRIPT_NAME}\?DT=$year$month$day$daysub#$year$month$day$daysub\n\n";
print PIPE "illegal post\n" if( $ille );
close(PIPE);
}
を
require "jcode.pl";
my $Name = $CommentName;
my $Message = $CommentMsg;
jcode::convert (\$Name, 'jis');
jcode::convert (\$Message, 'jis');
open(PIPE, "|$mtap -t -Fnicky!");
if( $error == 0 ){
print PIPE "To: $mto\n";
print PIPE "Subject: nicky!Notice ReciveCommentMessage\n\n";
print PIPE "Recieve Date : $cdate\n";
print PIPE "from : $ENV{REMOTE_HOST}($ENV{REMOTE_ADDR})\n";
print PIPE "Name : $Name\n";
print PIPE "Message : $Message\n";
print PIPE "http://$ENV{HTTP_HOST}$ENV{SCRIPT_NAME}\?DT=$year$month$day$daysub#$year$month$day$daysub\n\n";
print PIPE "agent : $ENV{HTTP_USER_AGENT}\n\n";
print PIPE "illegal post\n" if( $ille );
close(PIPE);
}
2006/06/29追記:
改造は自己責任でどうぞ。一応、自分で設置したnicky! で試してはいますが、この改造を行った結果について責任は負えませんのであしからず。
また、改造方法について個別の質問もご遠慮くださいませ。
スパムきだしたので取りつけたいと思うのですがサブルーチン「NickyInputComment」というのはnicky.cgiのどこかに書いてあるものなのでしょうか?
それとも別ですか?
よくわからないので教えて頂けると嬉しいです。
宜しくお願いします。
サブルーチン「NickyInputComment」はnicky.cgiのファイル内にあります。
「sub NickyInputComment{」から始まるブロックです。
未改造のver2005/10/24でしたら2525行目です。
EUCの扱えるテキストエディタ(TeraPadなど)で開いて、「NickyInputComment」を検索していただければ見つかると思いますよ。
ちゃんと見つかり、書き換えできました。
有難う御座いましたw
書き換え上手くできたと思うのですがnicky.cgiをみると500エラーなんですがこれは、間違えてるってことでしょうか?
>500エラー
おっしゃる通り、ミスがあるものと思われます。
ソースをちゃんとコピーできているか、必要なファイルが設置されているかなどご確認ください。
こちらで個別サポートを行うつもりはございませんので、ご了承ください。
全部消してやってたんですけど
2にのってないのが真中にあったんですねえ。
気づかなくて^^;
それを残して上下だけ変えたらいけました。
失礼致しました。
参考にさせ使わせてもらいました。
ありがとうございます(^^