スパムフィルタ系の機能が色々まとまっている便利なライブラリ。 条件に対して完全に拒否するのかCAPTCHAを出すのか選べる。 主に編集・コメント・添付する時にフィルタを通す設定ができる。(これも変更可能)
デフォルトで設定されているDNSBLは終了しているものが多いので、ipdnsblを使う場合はDNSBLが生きているか要確認。
patch < plugin.php.patch
patch < init.php.patch
/////////////////////////////////////////////////
// SpamFilter
//// reCAPTCHA の設定
define('SPAM_FILTER_RECAPTCHA_PUBLICKEY', '各自取得したキーを貼り付け');
define('SPAM_FILTER_RECAPTCHA_PRIVATEKEY', '各自取得したキーを貼り付け');
//// スパムと判断する条件を指定する
define('SPAM_FILTER_COND', '#useragent() or #filename() or #atag() or #ipbl() or #onlyeng() or #urlnsbl() or #urlbl() or #ngreg()');
//// CAPTCHAでのチェックをする条件を指定する
define('SPAM_FILTER_CAPTCHA_COND', '#ipcountry() or #ipdnsbl()');
//// 各フィルタ共通で設定できる指定
// URLでのマッチで自ドメインなどの無視すべきURL(ホワイトリスト)
define('SPAM_FILTER_WHITEREG', '/(rtwiki\.net)/i');
//// filename - アップロードファイル名によるフィルタ
// アップロードを許可しないファイル名の正規表現
define('SPAM_FILTER_FILENAME_REG', '/\.html$|\.htm$|\.exe$|\.swf$|\.php$/i');
//// ipdnsbl - クライアントのIPをDNSBLでチェック
define('SPAM_FILTER_IPDNSBL_DNS', 'bsb.spamlookup.net');
//// ipbl - クライアントのIPやホスト名によるフィルタ
// 許可しないIPやホスト名の正規表現
define('SPAM_FILTER_IPBL_REG', '/(ezserve8\.net|ubiquityservers\.com|your-server\.de|purewebtech\.net|comcast\.net)/');
//// urlbl - URLがブラックリストに入っているか確認
// URLのブラックリスト ホスト名でもIPでも可
define('SPAM_FILTER_URLBL_REG', '/(kinshi\.domain\.jp|kinshi\.domain\.com)/i');
//// ngreg - 内容の正規表現フィルタ
// コメント中で許可しない内容の正規表現
define('SPAM_FILTER_NGREG_REG', '/(死ね|働け)/i');
//// ipcountry - クライアントのIPの国をチェック
// マッチさせる国を指定する正規表現 JPを追加すると動作確認できる
define('SPAM_FILTER_IPCOUNTRY_REG', '/(CN|KR|UA|HK|US)/');上記だけでは実際にフィルタにひっかかっている人がいるのか分からないので、 SPAM_FILTER_CONDに引っかかったらログを残す仕様を追加。(SPAM_FILTER_CAPTCHA_CONDは除く) ログを置くフォルダ名は変更可能。
$spamfilter = new SpamFilter($_POST, $plugin);
+ // Client Information
+ $hp = $script;
+ $ua = $_SERVER["HTTP_USER_AGENT"] ? $_SERVER["HTTP_USER_AGENT"] : '';
+ $addr = $_SERVER['REMOTE_ADDR'];
+ if (! $_SERVER['REMOTE_HOST'])
+ $_SERVER['REMOTE_HOST'] = gethostbyaddr($addr);
+ $host = $_SERVER['REMOTE_HOST'];
+ // Pukiwiki Information
+ $ref = isset($vars['refer']) ? $vars['refer'] : '';
+ $page = isset($vars['page']) ? $vars['page'] : '';
+ $page = $page == '' ? $ref : $page;
- if ($spamfilter->is_spam())
+ if ($spamfilter->is_spam()) {
+ $log = strftime('%y/%m/%d %H:%M:%S') . "\t" . $addr . "\t";
+ $log .= $host . "\t" . $page . "\t" . $spam_type . "\n";
+ $fp = fopen(DATA_HOME . 'spam_filter/' . strftime('%y%m%d') . '.ignore.log', 'a');
+ fwrite($fp, $log);
+ fclose($fp);
die_message( "Spam check failed. Plugin:". $spamfilter->plugin_name ." Match:". $spamfilter->message ."<br>\n" );
+ }
+ return false;