Web Forumの改造 (禁止ブラウザとLink数の設定)
KENT WEBで配布されているCGI掲示板 Web Forumの改造です。
これは使いやすくて、いい掲示板でいろいろなサイト使われているます。
そのため掲示板を対象としたスパムも多くあります。
自分のサイトではスパムの多くはPerlを使って定期的にプロキシ通して書き込まれます。
プロキシを通してしいるので、IPの規制では意味がありません。
その対策として設定に禁止ブラウザとLink数の上限を指定できるようにします。
まず、wf_init.cgi をテキストエディタで開くとパスワードなどいろいろ設定する「基本設定」があります。
その設定項目の中に以下を追加します。
#一つの記事に対するlinkの数
$maxlink=3;#投稿を禁止するブラウザ
$banbrw=’libwww-perl’;
次に wf_init.cgi をどんどん下を見ていくと(約2/3あたり?)「入力チェック」を判別するスクリプトがあります。
そこに
# 他サイトからのアクセスを排除
if ($baseUrl) {
local($ref) = $ENV{‘HTTP_REFERER’};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
if ($ref && $ref !~ /$baseUrl/i) { &error(“不正なアクセスです”); }
}
と
#メッセージ内のLinkの数の確認
if ($in{‘message’} =~ /(http:[w.~-/?&=@;#:%]+.+){$maxlink,}/ ) {
&error(“Linkの数が $maxlink 以上です。Link数を減らしてください。”);
}
を追加します。
追加した感じはこんなのふうになります。
#—————-#
# 入力チェック #
#—————-#
sub chk_form {
# POST限定
if ($postonly && !$post_flag) { &error(“不正なアクセスです”); }# 他サイトからのアクセスを排除
if ($baseUrl) {
local($ref) = $ENV{‘HTTP_REFERER’};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
if ($ref && $ref !~ /$baseUrl/i) { &error(“不正なアクセスです”); }
}#ブラウザ判定
$brw = $ENV{‘HTTP_USER_AGENT’};
if($brw =~ /$banbrw/ ){
&error(“このブラウザからの投稿は禁止されています。”);
}if ($in{‘name’} eq “” || $in{‘name’} =~ /^(x81×40|s)+$/)
{ &error(“名前の入力モレです”); }
if ($in{‘message’} eq “” || $in{‘message’} =~ /^(x81×40|s|
)+$/)
{ &error(“コメントの入力モレです”); }
if ($in_email && $in{‘email’} !~ /[w.-]+@[w.-]+.[a-zA-Z]{2,5}$/)
{ &error(“E-Mailの入力が不正です”); }
if ($in{’sub’} eq “” || $in{’sub’} =~ /^(x81×40|s)+$/)
{ &error(“題名の入力モレです”); }
if ($in{‘url’} eq “http://”) { $in{‘url’} = “”; }#メッセージ内のLinkの数の確認
if ($in{‘message’} =~ /(http:[w.~-/?&=@;#:%]+){$maxlink,}/ ) {
&error(“Linkの数が $maxlink 以上です。Link数を減らしてください。”);
}}
そうすると、掲示板で確認してみると


という様になります。
——————————–
プログラムが見にくいのでこちらの方が見やすいかな?
プログラム改造部分


こんばんは。
ありがとうございます。
早速利用させていただきました。
これで減ってくれるとうれしいです。
今後ともよろしくお願いします。
コメント by ikuyubon — 2006/5/20 土曜日 @ 0:11:57
コメントどうもです。
自分のBBSでは、これでスパムが結構減りましたよ。
コメント by GRN — 2006/5/20 土曜日 @ 0:24:57