#--------------------------------------------------------------------- # BLホイホイ ver2.54 # AUTHOR : あびる # URL : http://www.abi-station.com/ # # このスクリプトはフリーですが、ご使用の場合はあびるのサイトに # リンクをはってくれると嬉しいです。 # また、これらを組み込んだスクリプトを配布しても構いませんが、 # 説明部分にあびるのサイトへのリンク(上記のもので可)をはってく # ださい。 # また、「ここの処理は違う!」とかありましたらご指摘ください。(笑) # このスクリプトを使用して起きたいかなる損害にも責任は負いません。 # #---------------------------------------------------------------------- #■更新情報 #(ver2.54 2002/07/02) #1.2行漏れてました(T-T) #(ver2.53 2002/07/01) #1.あらゆる文字を禁止ワードへ対応 #2.ちょっとしたセキュリティ(?)ホール対応 #(ver2.52 2002/03/31) #1.カタカナ禁止ワードへの対応 #(ver2.51 2002/03/23) #1.$namelengの設定漏れ追加 #2.BL対象者を別サイトに飛ばす処理を若干変更 #(ver2.50 2001/07/18) #1.軽度なルール違反書き込みの場合、BLに入れないで書き込みを無効とする設定追加 #(ver2.00 2001/07/03) #1.BLに入ったハンドルを使って別IPでアクセスしてもBLに入れる #2.BLに入ったハンドルがクッキーに残っていたらアクセス拒否 #3.BLに入ったプロキシ経由のアクセスを拒否 #4.BL対象者からのアクセスがあったら任意のページへジャンプさせる #5.ブラウズ環境によるアクセス拒否 #■等スクリプトの利点 #掲示板で変な書き込みをした方が自動的にブラックリストに追加され、追加された方は #そのサイト内の他のCGIにもアクセスできなくなってしまうという優れものです。 #もちろんリストへは任意で追加も可能です。 #最新バージョンのBLホイホイリリース日以降にリリースされたあびるのCGIには標準で組み込まれています。 #■ご使用方法 #(1)共有BLに載っているIPの人はCGIを実行できないようにする機能を組み込む。 #対応させたいCGIの # require './jcode.pl'; #の下あたりに以下を追加してください。 ---------------ここの下から $blfile = "../bl/blfile.cgi"; #設置したCGIから見たブラックリストへの相対パス #例) #top + abiya/index.cgi # + bl/bl.cgi # #この場合、index.cgiから見た相対パスは"../bl/blfile.cgi"になります。 #別に拡張子はdatでも構いませんが、外部からの参照を回避する為に拡張子をcgiに変更しました。 #ブラックハンドル #このハンドルを使用した形跡がある人はアクセスさせない #注:対象者をなくす場合は、''だけを用意しないで、絶対存在しないようなハンドルを用意してください。 @kinshiname2 = ( 'いやなやつ', ); #ブラウズ環境必須設定 #OSやブラウズ環境が空っぽの人は怪しいので自動的にブラックリストに追加 $kankyouhissu1 = 1; #1=追加する、0=追加しない #ブラウズ環境に"ANONYMIZER"を含んでいる人は怪しいので自動的にブラックリストに追加 $kankyouhissu2 = 1; #1=追加する、0=追加しない #BL対象者がアクセスしたときにジャンプさせるURL $bljump = "http://www.abi-staion.com/"; &blbase; sub blbase{########################################### BL対象者にアクセスさせないルーチン open(BL,"$blfile") || print "Content-type: text/html\n\n$blfileが開けませんでした"; seek(BL,0,0);@bl=;close(BL); $host=$ENV{'REMOTE_ADDR'}; $forwarded=$ENV{'HTTP_X_FORWARDED_FOR'}; foreach (@bl) { if(($_ !~ /word/)&&($_ !~ /name/)&&($_ !~ /------/)){ $tmp = $_; $tmp =~ s/\s*$//; $tmp =~ s/\*/\.\*/g; if(($host =~ /$tmp/)&&($tmp)){ $addbl = 1; } if(("$forwarded" eq "$tmp")&&($tmp)&&($forwarded)){ $addbl = 1; } } } if($kankyouhissu1){ if(!$ENV{'HTTP_USER_AGENT'}){$addbl = 1;} } if($kankyouhissu2){ if(index("$ENV{'HTTP_USER_AGENT'}","ANONYMIZER") > 0){$addbl = 1;} } foreach (@kinshiname2) { if(index("$ENV{'HTTP_COOKIE'}","$_") > 0){$addbl = 1;last;} } if($addbl){ print "Location: $bljump\n\n";exit; } } -----------------この上まで #これだけです。 #blfile.cgiへの相対パスを間違えないでね! #(2)自動的にBLに組み込む機能を追加する。 #自動BL追加ルーチンを組み込みたい場合、上記部分に続いて以下を追加してください。 ---------------ここの下から #禁止ワード #これを含む書き込みをすると自動的にブラックリストに追加 @kinshiword = ( '死ね死ね死ね', ); $renzoku = 100; #この数字以上同じ文字を連続で使うと自動的にブラックリストに追加 #6文字連続は色指定のタグでありえるので、7文字以上がオススメです。 #私の統計では7文字連続を一回でもやってしまう人は9割が困ったチャンです。 #注意ワード #これを含む書き込みをすると「そんな書き込みしないで!」と注意が出る。発言は反映されない。 @tyuiword = ( '死ね!', '帰れ!', ); $tyuirenzoku = 7; #この数字以上同じ文字を連続で使うと「そんな書き込みしないで!」と注意が出る。発言は反映されない $nameleng = 8; #名前の長さ制限。この制限を越える名前を使えているということはおかしいので自動的にブラックリストに追加 sub autobl{########################################### 自動BL追加ルーチン open(BL,"$blfile") || print "Content-type: text/html\n\n$blfileが開けませんでした"; seek(BL,0,0);@bl=;close(BL); $host=$ENV{'REMOTE_ADDR'}; $thantei = $hantei; $thantei =~ s/(\W)/sprintf("%%%02X", ord($1))/eg; $addbl = 0; if($fullusekey){push(@kinshiword,$fullusekey);} foreach (@kinshiword) { $_ =~ s/(\W)/sprintf("%%%02X", ord($1))/eg; if($thantei =~ /$_/){ $addbl = 1; last; } } foreach (@tyuiword) { $_ =~ s/(\W)/sprintf("%%%02X", ord($1))/eg; if($thantei =~ /$_/){ &error(0); } } $retmp = 1; $hantei2= $hantei; ($match, $code) = jcode::getcode(\$hantei2); $code = 'euc' if $code eq undef and $match > 0; jcode::convert(\$hantei2, 'euc', $code); $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; @chars = $hantei2 =~ /$ascii|$twoBytes|$threeBytes/og; for ($set=0; $set<$#chars; $set++){ if($set > 0){ $setm = $set - 1; if($chars[$setm] eq $chars[$set]){ $retmp++; }else{ $retmp = 1; } if($retmp >= $renzoku){$addbl = 1;last;} if($retmp >= $tyuirenzoku){&error(1);} } } $blnameleng = length($blname); if($blnameleng > ($nameleng * 2)){$addbl = 1;} if($kankyouhissu1){ if(!$ENV{'HTTP_USER_AGENT'}){$addbl = 1;} } foreach (@bl) { if($_ =~ /name/){ $tmp = $_; $tmp =~ s/\s*$//; $tmp =~ s/name_//g; if($blname eq $tmp){$addbl = 1;last;} } } if($addbl){ $times = time; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($times); $year += 1900; $month = sprintf("%02d",$mon +1); $mday = sprintf("%02d",$mday); $hour = sprintf("%02d",$hour); $min = sprintf("%02d",$min); $sec = sprintf("%02d",$sec); $jikan = "$year/$month/$mday $hour:$min:$sec"; ($ipa,$ipb,$ipc,$ipd) = split(/\./, $host); $host2= "$ipa.$ipb.$ipc.*"; $forwarded2 = $ENV{'HTTP_X_FORWARDED_FOR'}; if($forwarded2){ $pushdata = "------$jikan\n$host2\n$host\n$forwarded2\nname_$blname\nword_$hantei\n"; }else{ $pushdata = "------$jikan\n$host2\n$host\nname_$blname\nword_$hantei\n"; } push(@bl,$pushdata); open(BL,"+<$blfile");flock(BL, 2);truncate(BL, 0);seek(BL,0,0);print BL @bl;close(BL); if($filelockuse ==1){ if (-e,$lockfile){unlink($lockfile);} } print "Content-type: text/html\n\n"; print <<"EOM"; EOM exit; } } sub error {########################################### エラールーチン local($no) = @_; $msg[0] = "$hantei

危険な言葉が含まれていましたので発言は無効でした。"; $msg[1] = "$hantei

同じ文字を続けすぎていたので発言は無効でした。"; print "Content-type: text/html\n\n"; print <<"_ERROR_"; ごめんなさい!
$msg[$no]
_ERROR_ } -----------------この上まで #でもって。。。 #自動BL追加ルーチンを発動させる箇所に $hantei = $value; #$valueというのを、入力された言葉の変数に置き換えてください。 $blname = $name; #$nameというのを、入力した人の名前の変数に置き換えてください。 &autobl; #を追加してください。これをキチンと追加しないと自動追加されません。 #わからないなら自動追加機能は組み込まないことをオススメします。(笑)