このプログラムは無保証です。 NAME spam_filter - Perl による掲示板 CGI 用の URL/IP アドレスベースのスパムフィルタ SYNOPSIS use spam_filter; my $msg; # メッセージ本文 my $url; # ホームページリンク my $remote_ip; # アクセス者の IP アドレス(文字列) my $remote_host; # アクセス者のホスト名 my ($block, $reason) = spam_filter($msg, $url, $remote_ip, $remote_host); if ($block) { printf(STDERR "client %s(%s) denid by %s\n", $remore_ip, $remote_host, $reason); # エラー表示等の処理 } DESCRIPTION spam_filter() は Perl で書かれた掲示板等の CGI 用の スパムフィルタであり、掲示板 CGI 本体から呼び出される 関数の形式になっている。 このフィルタは ・特定の IP アドレス/ホストからの投稿を拒否する ・特定の URL へのリンクを含む記事を拒否する ことを可能にする。 使い方は、まずブラックリストに拒否したい IP アドレスやホスト名、 リンク先のホスト・IP アドレス書いておく。 記事の投稿があったときに、掲示板 CGI ・記事本文 ・ホームページリンク URL ・投稿者の IP アドレス ・投稿者のホスト名 (オプション) を引数に spam_filter() 関数を呼び出す。 フィルタはブラックリストを調べ、 1. 投稿者の IP アドレスがマッチした 2. 投稿者のホスト名がマッチした 3. 記事中に書かれた URL またはホームページ URL の ホスト名がマッチした 4. 記事中に書かれた URL またはホームページ URL の ホスト名の IP アドレスを調べ、その IP アドレスがマッチした (スパム業者が複数のドメイン名を一つのヴァーチャルサーバに まとめているときに有効) いずれかに該当すれば、$block に非ゼロを返す。 またマッチした条件を $reason に返す。 掲示板 CGI は戻り値を調べ、拒否することが可能である。 ブラックリストの書式 一行に一つのパターンを記述する。 `#' 以降はコメントである。 パターンは IP アドレスかホスト名である。 IP アドレスは 4 つの 10 進数をドットで区切ったものである。 192.168.0.1 # 192.168.0.1 にマッチ IP アドレスが途中のドットで終るとワイルドカードになり、 その先の数字は何でもマッチする。 192.168.0. # 192.168.0.0 〜 192.168.0.255 にマッチ 192.168. # 192.168.0.0 〜 192.168.255.255 にマッチ ホスト名は FQDN 表記である。 example.com # example.com にマッチ ホスト名の先頭がドットで始まるとワイルドカードになり、 その前のパートは何でもマッチする。 .example.com # foo.example.com や # bar.example.com 等にマッチ 例 # access deny 211.144.92.96 # cableplus.com.cn からのアクセスを拒否 # link deny 202.240.242.84 # http://e-ezweb.jp/, www.indies-gogo.tv 等 .kitehost.com .xuite.net .hexun.com .cn # .cn からのアクセス .cn へのリンクは拒否 xanga.com .xanga.com FILES .htrbl ブラックリスト。 掲示板 CGI と同じディレクトリに置くこと。 AUTHOR Copyright (C) 2006 candy http://www.bsddiary/net/soft/spam_filter/