spam_filter.php

スパムフィルタ系の機能が色々まとまっている便利なライブラリ。
条件に対して完全に拒否するのかCAPTCHAを出すのか選べる。
主に編集・コメント・添付する時にフィルタを通す設定ができる。(これも変更可能)

デフォルトで設定されているDNSBLは終了しているものが多いので、ipdnsblを使う場合はDNSBLが生きているか要確認。

ダウンロード

手順

  • spam_filter.php
    • EUCなのでUTF-8に保存しなおす。設定はpukiwiki.iniで上書きできるので編集不要。
    • plugin/内にアップロード
  • plugin.php.patch
    patch < plugin.php.patch
  • init.php.patch
    patch < init.php.patch
  • recaptchalib.php
    • plugin/内にアップロード
  • delegated-apnic-latest
    • /にアップロード
  • dns_get_ns.cache という空ファイルを作成
    • /にアップロードし、パーミッションを777に変更
  • pukiwiki.iniの変更
    細かいフィルタ設定は各自変更することをおすすめします
    /////////////////////////////////////////////////
    // 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)/');

メモ

  • ipbl候補
    • razil\.jp p2を経由 http://p2.2ch.net/
    • your-server\.de 宣伝BOT
    • doubleroute\.jp plala系
    • ict\.ne\.jp 伊賀上野ケーブルテレビ
    • tottori\.ocn\.ne\.jp 鳥取OCN
    • aichi\.ocn\.ne\.jp 愛知OCN
    • ictv\.ne\.jp 入間ケーブルテレビ(埼玉県)
    • icnet\.ne\.jp JCN ジャパンケーブルネット
    • em-net\.ne\.jp つなぐネットコミュニケーションズ
    • 海外の何か
      • ezserve8\.net|ubiquityservers\.com|purewebtech\.net|comcast\.net|dreamhost\.com|footholds\.net|ctinets\.com|lightspeed\.chrlnc\.sbcglobal\.net

フィルタで拒否したらログを残す

上記だけでは実際にフィルタにひっかかっている人がいるのか分からないので、
SPAM_FILTER_CONDに引っかかったらログを残す仕様を追加。(SPAM_FILTER_CAPTCHA_CONDは除く)
ログを置くフォルダ名は変更可能。

  • spam_filterフォルダを/に作成。(パーミッション777)
    • 他人に中身のファイルを閲覧されないように、.htaccess .htpasswdなどで規制する。フォルダ名も変えたほうがいいです。
    • CORESERVERの場合、管理画面の「ツール」に「htpasswdの生成」があります。
  • spam_filter.php 189行目付近を編集
         $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;

参考サイト

コメント

コメントはありません。 コメント/plugin/spam_filter.php?

コメント:

最終更新: 2016-08-22 (月) 00:52:50