トップ/pukiwiki1.4/plugin/spam_filter.php

pukiwiki1.4/plugin/spam_filter.php の変更点


#author("2025-04-20T15:03:43+09:00","default:nemusg.pad","nemusg.pad")
#author("2025-08-24T23:26:28+09:00;2025-04-20T15:03:43+09:00","default:nemusg.pad","nemusg.pad")
* spam_filter.php [#l5ebe029]

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

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

** ダウンロード [#n687665f]

- [[spam_filter.php - 美麻Wiki:http://www.miasa.info/index.php?%C8%FE%CB%E3Wiki%A4%C7%A5%B7%A5%B9%A5%C6%A5%E0%C5%AA%A4%CB%BD%A4%C0%B5%A4%B7%A4%C6%A4%A4%A4%EB%C5%C0#ofa18e88]]
- [[recaptchalib.php:http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest]] recaptchalib.phpは使わなくても置かないと全体が動かなくなる。
-- [[Google recaptcha:https://www.google.com/recaptcha/intro/]]でアカウント作成をしてPublic KeyとPrivate Keyを発行
- [[delegated-apnic-latest:ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest]] ipcountryフィルタで必要

** 手順 [#c3d9880d]

- 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)/');


** メモ [#ea699d7c]

- acceptlanguageフィルタが10回に1回の割合でWarningを吐くのでオフにした
- NGREGはNGワード集を参考に作成するといいかも
-- [[スパム対策用 禁止ワード・NGワード集 - Vector:http://www.vector.co.jp/soft/data/net/se475480.html]] スパム対策系NGワード集 1600件中1300件近くがURL系 日本語だけでもかなり実用的だが一部除外する必要はありそう。
-- [[ニコニコ生放送 運営NGワード一覧:http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E7%94%9F%E6%94%BE%E9%80%81%3A%E9%81%8B%E5%96%B6ng%E3%83%AF%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7]] 150件。現役で運営されているリストなので実用的だと思われる。
-- [[放送禁止用語一覧:http://monoroch.net/kinshi/]] 放送禁止用語なので参考にはなるがWikiではあまり入力されなそうな物が多い
-- [[輸入禁止ワード一覧:http://help.sekaimon.com/tables/ykin.html]] 外国語の禁止ワード。ipcountryやonlyengがあるので基本的には不要。
-- HTMLエンティティ系
--- [[THAI CHARACTER:http://www.sprawk.com/unicode/set/26]]


- 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

** フィルタで拒否したらログを残す [#d90312b9]

上記だけでは実際にフィルタにひっかかっている人がいるのか分からないので、
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;

** 参考サイト [#d1b33e1f]

- [[Wiki/PukiWiki/スパム(spam)を防止する方法 - TOBY SOFT wiki:http://tobysoft.net/wiki/index.php?Wiki%2FPukiWiki%2F%A5%B9%A5%D1%A5%E0%28spam%29%A4%F2%CB%C9%BB%DF%A4%B9%A4%EB%CA%FD%CB%A1]]

#include(parts/feedback,notitle)