Pukiwikiは誰でも書き込める反面、
掲示板と同様にスパムに悩まされます。
そこで、スパム(spam)を防止する方法を書いてみようという話です。
とくに、コメントスパムがひどい模様。
現在は、ページ新規作成スパムがヒドイ……。
spam_filter.php導入してみました。
今のところ、機械スパムは、ほとんど防げています。
spam_filter.php ver 0.75向けにページを書き直しました。
その他のスパムメモ→ ./スパマーメモ
以下の「NGワード」、「Akismet」、「ファイル添付防止」は全て、
以下のサイトの spam_filter.php で対処できます。
導入方法は上記サイトに書いてあります。
導入後は、
pukiwiki.ini.phpに
例えば、
function isWindowsMachine() { return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'); } function isLocalTestMachine() { // windows machine is local test environment return $_SERVER['REMOTE_ADDR'] === '127.0.0.1'; } define('SPAM_FILTER_AKISMET_API_KEY', '<akismet APIキー>'); $spamFilterCond = '#useragent() || #filename() || #formname() || (#onlyeng() && (#atag() || #urlnum())) || #urlbl() || #uaunknown()'; if (!isLocalTestMachine()) $spamFilterCond .= ' || #urlnsbl(SPAM_FILTER_URLNSBL_REG) || #urlnsbl(MY_SPAM_FILTER_URLNSBL_REG)'; define('SPAM_FILTER_COND', $spamFilterCond); // my URLNSBL setting define('MY_SPAM_FILTER_URLNSBL_REG', '/(\.theplanet\.com)/i'); $spamFilterCapchaCond = '#onlyeng() || #url(SPAM_FILTER_URL_REG,"comment,pcomment,article") || #atag() || #acceptlanguage()'; if (!isLocalTestMachine()) $spamFilterCapchaCond .= ' || #ipdnsbl()'; define('SPAM_FILTER_CAPTCHA_COND', $spamFilterCapchaCond); define('SPAM_FILTER_RECAPTCHA_PUBLICKEY', '<reCAPTCHAから取得した公開鍵>'); define('SPAM_FILTER_RECAPTCHA_PRIVATEKEY', '<reCAPTCHAから取得した秘密鍵>'); // 0.7.5の公式のものから、サービス停止しているlist.dsbl.org を除外 define('SPAM_FILTER_IPDNSBL_DNS', 'niku.2ch.net,bsb.spamlookup.net,bl.spamcop.net,all.rbl.jp'); // setting full-path of nslookup if (PHP_OS == "FreeBSD") { define('SPAM_FILTER_NSLOOKUP_PATH', '/usr/sbin/nslookup'); } elseif (isWindowsMachine()) { define('SPAM_FILTER_NSLOOKUP_PATH', 'nslookup'); }
などと書いておけばよいです。
これで、99.9%のスパムは防げます。
やっていることは、
まずは、問答無用でスパムとする判断(SPAM_FILTER_COND)ですが、
次に、それをすり抜けた場合、
reCAPTCHA(歪み画像認識API)を通す判断(SPAM_FILTER_CAPTCHA_COND)ですが、
以上のいずれかの状態のときに reCAPTCHA を通す。
ってな感じです。
一見、対処療法的ではありますが、それ以上の効果を発揮してくれています
spam_filter.phpの作者様には、マジで感謝です。
(つか、CAPTCHAまで対応してくださるとは思わなかった)
本家に取り込まれることを祈りたい。
2009/03/10前後にlist.dsbl.orgがサービス停止したため、#ipdnsblなどが極端に重くなっています。spam_filter.phpが対応されるまで、SPAM_FILTER_IPDNSBL_DNSから、list.dsbl.orgを除外しておきます
最後の指定部分は、ネームサーバーを引くための nslookup のパスの指定ですが、
今のバージョン(0.7.5)では指定しなくても、
php5の環境だろうし、またライブラリ(Net/DNS)でまかなえるので
なくても大丈夫だと思います。
DNSの解決部分がローカルのWindowsで動かないので、パッチを作りました。
spam_filter.php本家に取り込まれました。
spam_filter_for_windows-0_7_5.patch
これを当てれば、Windowsでも動作します。
Windows XP SP2, Vista SP1で動作を確認しています。
結論から言いますと、reCaptchaあればいりません
(たぶんベイズ推定な)スパムフィルターのAkismetについて。
詳しくは、以下を参考のこと。
PukiWiki/Akismetによるspam(スパム)防止機能 - ARK-Web SandBox Wiki
導入は、上のspam_filter.phpを導入することで可能です。
が、現状でspam_filter.phpのAkismetはうまく動いていない気がします。
とはいえ、reCaptchaでほとんど防げるので問題はないのですが。
正規表現で、NGワードをして、URLっぽいのをはじく設定にする
spamにはほぼ意味ないです。
上記、spam_filter.php で遮断できます。
ファイル添付を自由(管理者以外でも添付可)にしていると、
HTMLのファイル添付をされて、アタックされる。
メールで新着通知を設定していないと、気づかない間にいつのまにか、
設置されていて、((( ;゚Д゚)))ガクガクブルブル
上記、spam_filter.php でHTMLだけ遮断できます。
Show recent 10 comments. Go to the comment page.