Top > 美麻Wikiでシステム的に修正している点

ベースシステム

  • Pukiwiki Plus! 1.4.6-plus-u2-eucjp

導入プラグイン

twitter.inc.php

PukiWiki用Twitterプラグイン - モーグルとカバとパウダーの日記
http://d.hatena.ne.jp/stealthinu/20100607/p2

本文中にリアルタイムでTwitterの検索結果を表示してくれるプラグイン。

ust.inc.php

PukiWiki用Ustreamプラグイン - モーグルとカバとパウダーの日記
http://d.hatena.ne.jp/stealthinu/20100507/p2

Ustreamの動画を本文内で再生や、チャンネルで保存されている内容をリストアップしてくれるプラグイン。

googlemaps2.inc.php

PukiwikiでGoogleMaps2 - mynote
http://reddog.s35.xrea.com/wiki/Pukiwiki%E3%81%A7GoogleMaps2.html

GoogleMapsを本文中に配置して、マーカーも設置出来るプラグイン。

マーカーを設置した際に、googlemaps2.inc.php内の関数が見つからない、という理由でエラーが発生したため、googlemaps2_mark.inc.phpの先頭に

require_once('googlemaps2.inc.php');

を追加した。
もしかすると、Plus!と本家ではプラグインの呼び出し順に違いがあり、それでこの問題が発生するのかも?

u2b.inc.php

http://pukiwiki.cafelounge.net/plus/?Plugin%2Fu2b.inc.php

YouTubeの動画を本文内で紹介、再生してくれるプラグイン。

rssdiff.inc.php

http://pctraining.s21.xrea.com/download/rssdiff.inc_php.txt

RSSの出力内容を、現在との差分を本文に入れて出力してくれるプラグイン。
スキンを修正して、標準でこのプラグインの出力がRSSとして扱われるようにする。

mail.inc.php

http://pukiwiki.sourceforge.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fmail.inc.php

メールフォーム用。
凍結したページからでないと利用できないように制限が掛っているため、実質管理者権限のある人でないと運用できないようになっている。

recentcomment.inc.php

pcommentで、最近投稿されたコメントを任意の位置に表示するためのプラグイン

div.inc.php

任意のDIV指定を書けるようにするプラグイン
CSSの指定とともに利用することで、トップページのように、本文を2カラムにしたいページで利用。
一部うまく利用できなかったため、修正してある。
CSSは base_3float.css にて

div#content_right{
        float:right;
        width:48%;
}
div#content_left{
        float:left;
        width:48%;
}

と指定してwrap_content内でさらに左右分割するように指定してあり

#div(start, id, content_left)
【左側カラム内容】
#div(end)
#div(start, id, content_right)
【右側カラム内容】
#div(end)

のようにして利用する。

プラグインの修正

article.inc.php

filearticle.inc.php.patch

line_break=1の場合の修正

改行指定が必要ない設定でも改行文字が入ってしまい、無駄に空行が入ってしまうため、$line_break = 1のときに改行を入れないように修正。

スパム投稿への対応

この機能はspam_filter.phpに統合したため、そちらで一括して管理したほうが便利です。

投稿内容に、指定の正規表現が含まれていた場合に拒否する設定を追加。具体的には例えば</a>や[/url]が含まれている場合に拒否することで、スパム投稿を拒否することができるようになる。

設定はpukiwiki.ini.phpで下記のパラメータで禁止正規表現を指定する。

define('PLUGIN_ARTICLE_NGREG',  '/<\/a>|\[\/url\]/i'); 

comment.inc.php

filecomment.inc.php.patch

コメント入力欄行数の指定

コメント入力欄行数を増やすため、入力欄の行数指定ができるようにして、2行以上の場合はTEXTAREAを利用するように修正。
また、文中の改行を削除してしまうようになっていたため、最後の改行や空行だけ削除するようにし、文中の空行は改行命令に置き換えるように修正。

設定はpukiwiki.ini.phpで下記のパラメータで行数を指定する。

define('PLUGIN_COMMENT_ROWS_MSG',    2);

スパム投稿への対応

この機能はspam_filter.phpに統合したため、そちらで一括して管理したほうが便利です。

投稿内容に、指定の正規表現が含まれていた場合に拒否する設定を追加。具体的には例えば</a>や[/url]が含まれている場合に拒否することで、スパム投稿を拒否することができるようになる。

設定はpukiwiki.ini.phpで下記のパラメータで禁止正規表現を指定する。

define('PLUGIN_COMMENT_NGREG',  '/<\/a>|\[\/url\]/i'); 

pcomment.inc.php

filepcomment.inc.php.patch

コメント入力欄行数の指定

コメント入力欄行数を増やすため、入力欄の行数指定ができるようにして、2行以上の場合はTEXTAREAを利用するように修正。

設定はpukiwiki.ini.phpで下記のパラメータで行数を指定する。

define('PLUGIN_PCOMMENT_ROWS_MSG',   2);

スパム投稿への対応

この機能はspam_filter.phpに統合したため、そちらで一括して管理したほうが便利です。

投稿内容に、指定の正規表現が含まれていた場合に拒否する設定を追加。具体的には例えば</a>や[/url]が含まれている場合に拒否することで、スパム投稿を拒否することができるようになる。

設定はpukiwiki.ini.phpで下記のパラメータで禁止正規表現を指定する。

define('PLUGIN_PCOMMENT_NGREG',  '/<\/a>|\[\/url\]/i'); 

rss.inc.php

デフォルトのRSSバージョン指定をできるようにして、たとえばデフォルトをRSS1.0にすることで、IE7のRSSアイコンが機能するように修正。

filerss.inc.php.patch

設定はpukiwiki.ini.phpで下記のパラメータでデフォルトのバージョンを指定する。

define('PLUGIN_RSS_VERSION_DEFAULT', '1.0');

attach.inc.php

この機能はspam_filter.phpに統合したため、そちらで一括して管理したほうが便利です。

ファイル名が正規表現にマッチしたらアップロードを許可しないように修正。

fileattach.inc.php.patch
fileja.lng.php.attach.patch
fileen.lng.php.attach.patch

設定はpukiwiki.ini.phpで下記のパラメータで添付を許可しないファイル名を正規表現で指定する。

define('PLUGIN_ATTACH_UPLOAD_FILEREG', '/\.html$|\.htm$/');

init.php/file.php

スパム投稿の情報を簡単に参照できるようにするため、diffで表示した差分の最後に、編集者のIPやUSER AGENT情報などを表示するように修正。

lib/init.php へのパッチ fileinit.php.patch
lib/file.php へのパッチ filefile.php.patch

spam_filter.php

akismet組み込み用の追加を参考に、複数のスパムフィルタを利用できる汎用のフィルタ(のベースになるもの)を作成。

lib/spam_filter filespam_filter.php (0.7.5 NSやCountry系フィルタのキャッシュによる高速化)
lib/plugin.php へのパッチ fileplugin.php.patch (spam_filter 0.7.0以降用)

正規表現によるHTTP_USER_AGENTでのフィルタを利用するためには下記パッチも必要です。

lib/init.php へのパッチ fileinit.php.patch

もしくは、PukiWiki Plus! 1.4.7と1.4.6用および本家のPukiWiki 1.4.7と1.4.6用に、パッチ済みのファイルを準備しましたのでそちらを利用してください。
こちらには下で説明している、akismet.class.phpとrecaptchalib.php、delegated-apnic-latest、PEARのNet_DNSクラスも同梱しましたので、展開したファイルをすべてPukiWikiのルートディレクトリに上書きし、NSのキャッシュ用ファイルdns_get_ns.cacheを書き込み可能(ファイル属性を777)にすることで、そのまま使えるようになります。

urlnsblなどのNSを引くフィルタを導入する場合で、PHP4などのようにdns_get_recordが引けない場合は、PEARのNet_DNSクラスを導入するか、nslookupコマンドを引けるよう環境にしておく必要があります。
また、NS名を引いたキャッシュを保存している「dns_get_ns.cache」という空のファイルを、PukiWikiのトップディレクトリ(pukiwiki.ini.phpがあるディレクトリ)に置いて書き込み可能(ファイル属性を777)にしておいてください。

ipcountryフィルタを導入する場合は
ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest
「delegated-apnic-latest」のファイルをPukiWikiのトップディレクトリ(pukiwiki.ini.phpがあるディレクトリ)におく必要があります。
【うざい国からのアクセスを全て遮断】
http://www.42ch.net/~shutoff/
からも同ファイルをダウンロードできます。

reCAPTCHAを利用するためには、PHP Library for reCAPTCHAから、「recaptchalib.php」をダウンロードして、libにおく必要があります。
そして、reCAPTCHA Admin: Loginから暗号化キーを取得する必要があります。
これらはすべてフリーになっています。

また、Akismetのフィルタを利用するためには
PukiWiki/Akismetによるspam(スパム)防止機能 - ARK-Web SandBox Wiki】
http://www.ark-web.jp/sandbox/wiki/190.html
を参照の上、「akismet.class.php」を導入する必要があります。

pukiwiki.ini.phpで、利用するフィルタ種を

define('SPAM_FILTER_COND', '#useragent() or #filename() or #atag() or #ngreg or (#onlyeng() and #urlnum()) or #urlbl() or #urlnsbl()');

のように指定します。
条件の否定、例えばUSER_AGENTの内容に「Mozilla」が含まれて「いない」場合と表現したいときは

! #useragent('/Mozilla/') 

という表記で表すことが出来ます。
また、各フィルタをどのプラグインに掛けるかを

define('SPAM_FILTER_NGREG_PLUGIN_NAME', 'edit,comment,pcomment,article');

のようにカンマで区切って指定出来ます。
そして、各フィルタ毎の設定についても

define('SPAM_FILTER_NGREG_REG', '/(@mail\.ru|botmetkatres)/i');

のように指定出来ます。
この例では正規表現によるNGワード「@mail.ru」「botmetkatres」のフィルタ(ngreg)を編集(edit),commentなどの書き込みに対して掛けるよう指定しています。
これらの指定は、関数の引数で個々の条件ごとに渡してやることも出来ます。
個々のフィルタの設定がデフォルトである程度書いてあるため、SPAM_FILTER_CONDで下記制限を選択するだけで、使えるようになります。

また、完全に拒否してしまうのではなく、怪しいと思われる場合にはCAPTCHA(歪んだ文字列を入力させてロボットからの入力を拒否する)を使って確認することができます。

define('SPAM_FILTER_RECAPTCHA_PUBLICKEY',  '【公開鍵のテキスト】');
define('SPAM_FILTER_RECAPTCHA_PRIVATEKEY', '【秘密鍵のテキスト】');
define('SPAM_FILTER_CAPTCHA_COND', '#url and (#ipcountry() or #ipdnsbl())');

上から2行でreCAPTCHA Admin: Loginから取得した暗号化キーを設定します。
下の1行では、どの条件にマッチした場合にCAPTCHAでのチェックを掛けるのかを指定します。
この例では、URLが書いてある場合で、中国や韓国からもしくは公開ブラックリストに登録されているIPの場合、CAPTCHAによるチェックがかかるようになります。
CAPTCHAには現在のところ、reCAPTCHAのみ利用出来ます。

SPAM_FILTER_CONDでは「完全に黒」と言い切れる条件や、ボットではなく人が書いてくるためCAPTCHAを抜けてくるようなスパムの条件(urlblやuseragent、filenameなど)を書いておき、SPAM_FILTER_CAPTCHA_CONDではこれだけではスパムとは言い切れないようなものや、誤検出があったときに簡単に救済できるようにしたい場合の条件(urlnumやipcountryなど)を書いておくと良いでしょう。

また、誤検出や書き込み速度の低下、負荷やの低減のため、URLのホワイトリストを設定しておくと良いでしょう。
例えば、ここの「miasa.info」とGoogleのURLは疑わないとするなら

define('SPAM_FILTER_WHITEREG', '/(miasas\.info|google\.(com|co\.jp))/i');

のように設定します。

現時点では以下の制限を利用できます

  • ngreg
    正規表現のNGワードで編集内容に対するフィルタ
  • url
    内容にURLっぽいものが含まれているかチェック
  • atag
    内容に</a>や[/url]のようなアンカータグが含まれているかチェック
  • onlyeng
    内容が半角英数のみ(日本語が入っていない)かチェック
  • urlnum
    内容に含まれているURLが何個以上かチェック
  • ipunknown
    クライアントのIPが逆引きできるかチェック
  • ips25r
    クライアントのIPが動的IPっぽい(S25Rにマッチする)かチェック
    書き込みは普通動的IPからなので、トラックバックスパムの判定に使う。
  • ipbl
    クライアントのIPかホスト名がブラックリストに入っているか確認
  • ipdnsbl
    クライアントのIPをDNSBL(公開ブラックリスト)でチェック
  • ipcountry
    クライアントのIPの国がどこかをチェック
  • uaunknown
    HTTP_USER_AGENTが既知(pukiwiki.ini.phpで$agentsで指定)かチェック
  • useragent
    正規表現によるHTTP_USER_AGENTでのフィルタ
  • acceptlanguage
    正規表現によるHTTP_ACCEPT_LANGUAGEでのフィルタ
  • filename
    正規表現による添付ファイル名でのフィルタ
  • formname
    form中に存在しないはずの項目(urlやemailなど)があるかチェック
  • urlbl
    URLがブラックリストに入っているか確認
    ただ、ここで標準で入れているURLのブラックリストよりも、本家のスパムフィルタのURLリストのほうが非常によく網羅されているので、そちらのほうが強力です。
  • urlcountry
    URLのサーバのある国がどこかをチェック
  • urldnsbl
    URLがDNSBLに入っているか確認
  • urlnsbl
    URLのNS(ネームサーバ:ドメインの名前を管理しているサーバ)がブラックリストに入っているか確認
    NSでブラックリストにしてあるため、ブラックリスト入りしている同じ業者が新しいドメインを取得しても、NSを変更しない限り防げるため、本家のURLブラックリストを使っている場合でも有効です。
  • urlnscountry
    URLのNSの国がどこかをチェック
  • akismet
    Akismetを利用したフィルタ

実際の設定例については、
いくつかのスパムフィルタを使えるspam_filter.phpの導入
PukiWiki Plus!用のスパムフィルタ spam_filter.php
などを参照ください。

また、こちらのページでも、akismetでのチェックに引っかかった場合だけ、reCAPCHAのチェックを掛ける、というこのフィルタの一部利用方法と同じ事が出来るフィルタを書かれています。
誤検出の少ないスパムフィルタを探されている方は、こちらもチェックしてみると良いでしょう。

Plugin/akismet.inc.php - SONOTS Plugin
http://lsx.sourceforge.jp/?Plugin%2Fakismet.inc.php

現在、URLが抜け落ちてしまっている

  • c33t [a] [/a] -- ma113zda? 2007-10-30 (火) 03:01:09

のようなスパムが抜けてきてしまっているため、とりあえず「[/a]」をATAGの設定に入れて拒否するように変更。
また、ACCEPT_LANGUAGEを見れるようにして、それでひっかけてCAPTCHAへ流す予定。

spam_filter についての質問はこちらへ。


  • 1.4.6.zipで、lib/init.phpが、syntax error, unexpected $end エラー。
    調べたところ、文字コードがSJISだったからの様子。 -- 通りすがり? 2008-11-26 (水) 21:16:17
  • 了解しました。
    文字コード確認せずに、いただいたパッチそのまま当てたのがまずかったと思います。
    ただ、なぜかうちとこでは問題なく動いてる感じなんだけどなぜだろう??
    また後で修正してアップし直したいと思います。 -- さとう 2008-12-04 (木) 16:22:36
  • 挿入できるよ(*´ω`)★ http://www.l7i7.com/ -- 私だ? 2011-12-29 (木) 14:21:15
  • 香川県ルー餃子のフジフーヅはバイトにパワハラの末指切断の重傷を負わせた犯罪企業 -- 名無しのリーク? 2016-06-20 (月) 00:18:41
  • 香川県ルー餃子のフジフーヅはバイトにパワハラの末指切断の重傷を負わせた犯罪企業 -- 名無しのリーク? 2016-06-23 (木) 02:21:49

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

counter.inc.phpで昨日のカウンターが正しく表示されない問題の対応

PHP5.1以降でcounter.inc.phpに問題が起きる。

Wiki/PukiWiki/counterプラグインでyesterdayが0になる件 - TOBY SOFT wiki
http://tobysoft.net/wiki/index.php?Wiki%2FPukiWiki%2Fcounter%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%A4%C7yesterday%A4%AC0%A4%CB%A4%CA%A4%EB%B7%EF

設定ファイルの修正

ローカルなアイコンを直接表示させるためにアイコンフォルダを準備

pukiwiki.ini.php

// ローカルなアイコン管理用
// 管理者がアイコンを置くためのディレクトリ
define('ICON_DIR', 'icon/');
// アイコン用のURIを設定
define('ICON_URI', ROOT_URI . ICON_DIR);

(up)(new)を手軽に入れれるようにする

(up) (new)

という表記で簡単にアイコンを書けるようにする。
default.ini.php ファイルの facemark_rules に追記

// new up marks
'(\(new\))'     => ' <img alt="$1" src="' . ICON_URI . 'new.jpg" />',
'(\(up\))'      => ' <img alt="$1" src="' . ICON_URI . 'up.jpg" />',
'(\(star\))'    => ' <img alt="$1" src="' . ICON_URI . 'star.gif" />',

アイコンフォルダにある画像を簡単に直接表示できるようにする

(icon 【画像ファイル名】)

という場合、アイコン画像のURLが直接書かれるようにする。
default.ini.php ファイルの facemark_rules に追記

// icon replace
'\(icon\s+(\S+)\)' =>' <img alt="$1" src="' . ICON_URI . '$1" />',

refプラグインで画像サイズを取得しないようにする

refプラグインで画像が表示する場合、デフォルトでは画像サイズを得るようになっているが、取得できない画像や時間がかかるものがある場合、そこでサイズを得るために読み込もうとするため、非常に遅くなってしまう問題が起こる。
URL指定時に画像サイズを取得するかを決める PLUGIN_REF_URL_GET_IMAGE_SIZE を画像サイズを取得しないように変更。

pukiwiki.ini.php

define('PLUGIN_REF_URL_GET_IMAGE_SIZE', FALSE);

(参考)
PukiWiki Plus!を利用して地域情報サイトを構築しています。 地域の方に広く使ってもらうために講習を行ったのですが、8台くらいで同時にページを表示しようとしただけで、.. - 人力検索はてな
http://q.hatena.ne.jp/1169192832

コメントの入力欄を2行に設定

comment,pcomment プラグインの修正をして、コメントの入力欄を指定できるようにしたので、comment,pcomment共に2行に指定。

pukiwiki.ini.php

define('PLUGIN_COMMENT_ROWS_MSG',    2);
define('PLUGIN_PCOMMENT_ROWS_MSG',   2);

ARTICLEプラグインの投稿内容で改行をBRに自動変換しない

pukiwiki.ini.php

define('PLUGIN_ARTICLE_AUTO_BR',     0);

RSSのデフォルト出力バージョンを1.0にする

CSSを変更し、rssdiffプラグインを使ってRSSの出力に差分も表示されるようにしたため、現在は使っていません。

pukiwiki.ini.php

define('PLUGIN_RSS_VERSION_DEFAULT', '1.0');

スキンの設定

skin/miasa.skin.php というスキン設定ファイルを skin/iridorange.skin.php をベースに修正して作成

上部メニューの表示内容を修正する

ja.lng.php ファイルの内容を修正

「編集」→「このページを編集する」
「バックアップ」→「更新履歴をみる」
「差分」→「最新の修正箇所をみる」
など、説明をわかりやすいように変更。

fileja.lng.php.patch

Navi2を利用しているため、Navigationページを修正してメニュー内容を変更

-edit
-diff
-backup
-new
--rename
--upload
--copy
--freeze
--unfreeze

という設定で

このページを編集する 最新の修正箇所をみる 更新履歴をみる 新しいページを作る

という表示になります。

本文にページタイトルが出ないようにする

skin/miasa.skin.php ファイルでH1を本文に出さないようにして、サイトタイトルの下のページ名をH1で出すように修正

編集時にはじめからテキスト整形ルールを表示するようにする

skin/miasa.skin.php ファイルで

$_LINK['edit'] = "$script?cmd=edit&amp;help=true&amp;page=$r_page";

を入れて、編集コマンドで最初からhelp=trueとなるように修正

RSSをrssdiffプラグインを使うように変更

skin/miasa.skin.php ファイルで

$_LINK['rss']  = "$script?cmd=rssdiff";

を入れて、rssdiffプラグインのRSSの出力として使うように修正

スパム対策

「FrontPage」→「TopPage」に修正

pukiwiki.ini.phpで「$defaultpage」を「FrontPage」→「TopPage」に修正。
スパマーはFrontPageで検索してターゲットを探している場合が多いようなので、FrontPageという名前を使わないようにしました。

pukiwiki.ini.php

$defaultpage  = 'TopPage';     // トップページ / 既定のページ

タイムスタンプを変更しないで修正を出来なくする

URL書き換えスパムが、タイムスタンプを変更しないでこっそり変更してくるため、タイムスタンプを変更しないで修正が出来ないように修正。

pukiwiki.ini.php

$notimeupdate = 2;

いくつかのスパムフィルタを使えるspam_filter.phpの導入

spam_filter.php自体については、このページ中にあるspam_filter.phpを参照してください。

lib/spam_filter.php filespam_filter.php
lib/plugin.php へのパッチ fileplugin.php.patch

および、正規表現によるHTTP_USER_AGENTでのフィルタを利用するためのパッチ
lib/init.php へのパッチ fileinit.php.patch

および、最終編集者の情報を知るためのパッチ
lib/file.php へのパッチ filefile.php.patch

を導入します。

spam_filter.phpをlibディレクトリ以下に置きます。
plugin.phpにplugin.php.patchを当てて同ファイルを置き換えます。同様にinit.phpとfile.phpもパッチを当てます。

ipcountryフィルタを使うため、
ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest
のファイルをPukiWikiのトップディレクトリ(pukiwiki.ini.phpがあるディレクトリ)に置きます。

reCAPTCHAによるCAPTCHAを使うため、
PHP Library for reCAPTCHAからrecaptchalib.phpをlibディレクトリ以下に置きます。

NS系フィルタを使うため、PEARのNet_DNS(PEAR :: Package :: Net_DNS http://pear.php.net/package/Net_DNS)をダウンロードして、トップディレクトリにNetというディレクトリ名に変更して置きます。もしくは普通にPEARのライブラリを置く場所にインストールしても良いです。
また、キャッシュ用のdns_get_ns.cacheというファイルをtouchで作って、chmod a+wでファイル属性を777にしておきます。

下記のように、利用するスパムフィルタを指定します。

pukiwiki.ini.php

define('SPAM_FILTER_COND', '#useragent() or #filename() or #formname() or #atag() or (#onlyeng() and (#urlnum() or #uaunknown())) or #urlbl() or #urlnsbl() or (#url() and #ipdnsbl())');
define('SPAM_FILTER_CAPTCHA_COND', '#acceptlanguage("dummy") or  (#url() and (#onlyeng() or #ipcountry() or #ipdnsbl()))');
define('SPAM_FILTER_WHITEREG', '/(miasa\.info|hakuba\.jp|hakuba\.ne\.jp|nagano\.jp|miasa\.ne\.jp/i');
define('SPAM_FILTER_RECAPTCHA_PUBLICKEY',  '【公開鍵】');
define('SPAM_FILTER_RECAPTCHA_PRIVATEKEY', '【秘密鍵】');

現在導入しているフィルタとその設定です。

  • 拒否
    • クライアントHTTP_USER_AGENTが「WWW-Mechanize」「libwww-perl」等からの書き込みとファイル添付を拒否
    • 添付ファイル名拡張子が「.html」「.htm」の添付を拒否
    • フォームに存在しないはずのurlやemailという名前の項目があったら拒否
    • 編集した内容に</a>や[/url]が含まれている書き込みを拒否
    • 内容に日本語がなくてURLが3件以上ある書き込みを拒否
    • URLのブラックリストで拒否(ブラックリストはデフォルト)
    • URLのネームサーバのブラックリストで拒否(ブラックリストはデフォルト、主に中国のレンタルサーバNS)
  • CAPCHAでチェック
    • Accept Languageの設定が無い、空の場合
    • URLが書いてあってかつ、中国韓国ウクライナからか、公開ブラックリスト(オープンプロクシなど)からの書き込み

スパム投稿の情報を参照できるパッチを導入

init.php/file.php
スパム投稿の情報を簡単に参照できるようにするため、diffで表示した差分の最後に、編集者のIPやUSER AGENT情報などを表示するように修正。

AタグやphpBB形式のタグ書式でURLが書き込まれていたら、その書き込みをキャンセル

これは前記spam_filter.phpに統合されたため、現在は利用していません。
spam_filter.phpを設置してplugin.phpへのパッチを当ててもらえれば、個別のプラグインへのパッチを当てる必要はないので、spam_filter.phpのほうを利用いただいたほうが簡単です。

articleやcomment,pcommentの内容に、「</a>」と「[/url]」というタグが入っている書き込みを拒否する。

article.inc.php,comment.inc.php,pcomment.inc.php プラグインの修正と、禁止パラメータの指定。

pukiwiki.ini.php

define('PLUGIN_COMMENT_NGREG',  '/<\/a>|\[\/url\]/i');
define('PLUGIN_PCOMMENT_NGREG', '/<\/a>|\[\/url\]/i');
define('PLUGIN_ARTICLE_NGREG',  '/<\/a>|\[\/url\]/i');

「.html」「.htm」のファイルアップロードを禁止

これは前記spam_filter.phpに統合されたため、現在は利用していません。
spam_filter.phpを設置してplugin.phpへのパッチを当ててもらえれば、個別のプラグインへのパッチを当てる必要はないので、spam_filter.phpのほうを利用いただいたほうが簡単です。

拡張子がHTMLファイルのアップロードを禁止しました。

attach.inc.php プラグインの修正と、禁止パラメータの指定。

pukiwiki.ini.php

define('PLUGIN_ATTACH_UPLOAD_FILEREG', '/\.html$|\.htm$/');

リダイレクトサービスを利用したURLが一定数以上の更新を禁止

本家のURLリストからリダイレクトサービスの部分を引いてきて、それだけ禁止にできるようにしたい。
というか、本家のURLブラックリストを利用できるようにしたいが、まだ手をつけてない。

他のWikiサイトでの導入例と本家バージョン向けパッチ

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

質問や要望などコメントがあればどうぞ

  • 他のWikiサイトでの導入例と本家バージョン向けパッチ ですけど、
    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
    に変わってるみたいです -- 2007-06-18 (月) 09:37:47
  • ありがとうございます。リンク先を修正しました。 -- さとう 2007-06-19 (火) 10:07:53
  • Nice site!
    http://jwnbmmat.com/dqeq/vhzs.html | http://wkapzxut.com/exaa/ulog.html -- Pamela? 2007-07-30 (月) 20:31:27
  • ↑すごく久しぶりにスパムが抜けてきました。
    が、このURLは存在していないし、ドメインも取得されていないようです。
    もしかして時限式なのか?つまり、書き込んでおいて、後からドメインを取得してURLのページを作るのかと思い、記録代わりに残しておきたいと思います。 -- さとう 2007-07-31 (火) 01:35:41
  • spam_filter.php はtrackerには使えないのでしょうか?
    trackerスパムに対してまったく機能しません。 -- sel? 2007-09-02 (日) 22:48:16
  • 良く確認していませんが、trackerの「内容」について検査するフィルタは上手く動かない可能性はあります。
    「内容」を示すフィールド名が'msg'ではない場合、そうなります。 -- さとう 2007-09-03 (月) 16:32:44
  • フィルタリングしたspamのログを確認する方法はありますか? -- denev? 2008-02-08 (金) 02:56:13
  • あー、ログは残らないですね…
    spam_filter.phpのfunction spam_filter内で、スパム認定された場合にエラーを出す様にしているのですが、そこでログを残す様に修正されるとよいと思います。 -- さとう 2008-02-08 (金) 10:00:17
  • ありがとうございます。やってみます。 -- denev? 2008-02-09 (土) 14:41:19
  • はじめまして、さとう様。もしよろしければ本家1.4.6用パッチ済みファイルf群も公開してはいただけないでしょうか。できれば、ご検討おねがいします_(._.)_ -- もにょにょ? 2008-03-22 (土) 19:29:53
  • 検討いたします。 -- さとう 2008-03-24 (月) 15:33:17
  • spam_filter.phpの修正(219行目):$this->pluginname → $this->plugin_name -- 匿名? 2008-03-29 (土) 19:17:47
  • ありがとうございます.修正します. -- さとう 2008-03-31 (月) 16:40:33
  • 本家1.4.6用パッチ済みですが、pukiwiki本家で1.4.6の公開がされていないので、必要な元ファイルを取ってくることが出来ませんでした。
    そのため対応ができません。ご了承下さい。 (T-T -- さとう 2008-04-04 (金) 17:06:46
  • 上でいただいていたspam_filter.phpのバグ修正と、修正したspam_filter.phpの入った1.4.7/1.4.7plus/1.4.6plusを載せ直しました。
    ついでにspam_filterに、http_accept_languageでのチェックを掛けられるようなフィルタを追加しました。 -- さとう 2008-04-04 (金) 18:32:30
  • すでに公開停止されてたんですか。無理を言ってしまい申し訳ありませんでした。 -- もにょにょ? 2008-04-06 (日) 00:02:04
  • 実は、1.4.6のソース中に、GPLではないライセンスのコードが含まれていたため、以降はそのソース(trackback関連)が削除されたものになっています。
    そのため、1.4.6は再配布されていない状況です。
    うちのパッチはそことは無関係のところにしか当たらないので、もし1.4.6のアーカイブをいただければ、載せることは可能なのですが。 -- さとう 2008-04-07 (月) 08:57:07
  • teananさんのサイトに置いてあるAutoAlias対応版1.4.6ではダメでしょうか?自分は現在これを設置させていただいてるのですが -- もにょにょ? 2008-04-08 (火) 11:30:03
  • こちらのものを利用して1.4.6版作ってみました。
    が、file.phpにパッチ当ててあるそうなので、file.phpのみ除外しています。
    file.phpは最後に修正した人の情報を出すための修正なので、なくてもスパムフィルタの機能は利用できるので、とりあえずこれで。 -- さとう 2008-04-08 (火) 14:24:54
  • さとうさん、ありがとうございます!
    運営中のwikiがURLを変更するspamに荒らされて壊滅状態だったのですが、これで復旧の目処が立ちそうですm(_ _)m -- もにょにょ? 2008-04-10 (木) 12:39:47
  • こんにちは、お久しぶりです。うちのページでも(旧バージョンですが)配布していたのですが、プレビューの際のチェック機能のバグのパッチを投げてくださった方がいらっしゃいましたので、こちらにも投げておきます。
    --- spam_filter.php.orig	2007-06-02 02:27:10.000000000 +0900
    +++ spam_filter.php	2008-03-29 18:38:45.781250000 +0900
    @@ -201,7 +201,7 @@
         {
             // edit で preview のときはチェック掛けない
             global $vars;
    -        if ($this->pluginname == 'edit' && isset($vars['preview'])) return FALSE;
    +        if ($this->plugin_name == 'edit' && isset($vars['preview'])) return FALSE;
             // フィルタ条件の指定がなければそのまま返る
             if (preg_match('/^\s*$/', $cond)) return FALSE; -- [[TOBY]] &new{2008-04-23 (水) 14:59:10};
  • ありがとうございます。
    実は、同じバグをこのコメントの3/29にご指摘いただいており、今は修正したものになっております。
    またなにか不具合ありましたらレポートいただけるとありがたいです。 -- さとう 2008-04-23 (水) 17:02:48
  • 過去レスをよくよんでませんでした orz
     
    最近重く感じていたので、デバッグついでに0.7.5にアップデートさせていただきました。URLNSBLがすごく軽くなって助かりました。(いまさらですいません)
    一応、WindowsでもURLNSBLが(というかNet/DNSが)パッチをあてて動作しましたのでご報告までに……。パッチは後日アップいたします。
     
    あと重い原因をさぐっていたのですが、どうもakismetが極端に重い?みたいです。重い、というかakismetのところまでくると反応がこなくなるというか……。akismet.class.php の中までデバグできてないのですが、一旦#akismetをはずして使ってみてます。何か原因をご存知ありませんでしょうか? -- TOBY? 2008-05-25 (日) 05:36:15
  • うちは、akismet使ってないんですよ〜。使わなくても現状、reCAPTCHAで全部拒否されているようなので。
    MMORPGのRMT狙った攻撃受けてるところだと、人が書き換えてるようなので、reCAPTCHAも抜けちゃうからそうもいかないんだと思うのですが。
    最近は新たなフィルタとかぜんぜん組んでないんですが、javascript使うような方法や、popfileでベイジアンフィルタ使う方法とか、akismet使わなくても良くなる手を組み込めないか、もちょっと考えてみます。 -- さとう 2008-05-26 (月) 11:43:47
  • そういえば Akismet の対抗で TyePad AntiSpam が出ているので、そっちをうかうことができる用に関数書いてもいいかな?と思ってます。
    TypePad AntiSpamのほうが、後発だけあってちょっと性能が良いらしいので。 -- さとう 2008-06-03 (火) 10:01:02
  • はじめまして、信オン管理人です。ここのspamfilterを利用させていただいてます。早速ですが、当wikiの本陣で、『ページ編集で雛形にするページ→装備金型3を選ぶとたまに認証が出る。』『装備金型2を読み込んだ際にも認証が出ます。ただ、でるページと出ないページがある
    』などの報告が利用者から出ております。自分でも確認したところ、『Error message : Spam check failed. Plugin:edit Match:onlyeng 』の内容で確かに、画像認証に飛ばされます。やった内容は、編集で金型を読み込むです。金型の内容は英文だけでもありませんし、タグ類も特に入ってません。これは、当サイトで試してもらうことはいつでも可能です。 -- 信オンwiki管理人? 2008-06-03 (火) 14:23:19
  • 早速試させていただき、自分も再現すること確認させていただきました。
    ちなみに、テンプレート読み込みのタイミングでのみ発生して、それ以外の実際の編集などでは起こらない、ような感じではないかと思います。
    テンプレート機能をほとんど使っていなかったので、そのあたり未確認でしたので、またソースのほうを確認してみたいと思います。
    ご報告、ありがとうございます。 -- さとう 2008-06-03 (火) 16:21:26
  • 少し調べてみました。
    テンプレート読み込みは、templateプラグインの呼び出しで行われており、templateプラグインの呼び出し時には、特に設定しない限りspam_filterが呼ばれてもそのまま戻るはず… と思ったのですがどうしてなのだろう?
    うちはテンプレート読み込み使わないので、テンプレート読み込み使うテスト環境を作ってみて確認してみます。
    しかし、特定のテンプレート読み込みのみ、これが発生しているようなので、他の理由との複合条件で起きているような感じがしてます。 -- さとう 2008-06-04 (水) 18:37:44
  • フィルター条件を晒しておきますね。
     
    define('SPAM_FILTER_ATAG_REG', '/\[HTTP:|<\/a>|\[\/url\]/i');
    define('SPAM_FILTER_COND', '#useragent() || #filename() || (#onlyeng() && (#atag() || #urlnum())) || #urlbl() || #urlnsbl() || #uaunknown() || (#onlyeng() && #akismet())');
    define('SPAM_FILTER_CAPTCHA_COND', '#onlyeng() || #url(SPAM_FILTER_URL_REG,"comment,pcomment,article") || #atag() || (#url and (#ipcountry() or #ipdnsbl()))');
     
    特定のテンプレートがあやしいですね、でも同じテンプレでもエラーが発生したりしなかったりする事もあるのが謎ですね。 -- 信オンwiki管理人? 2008-06-04 (水) 23:41:01
  • CAPTCHAが出ているので、SPAM_FILTER_CAPTCHA_CONDのonlyengが引っ掛かっているのだと思いますが… なぜだかさっぱりわかりません。なにか特定の条件でtemplateプラグイン呼び出しだと認識されない時があるのかな?
    とにかく、設定の問題ではなさそうということがわかりました。ありがとうございます。
    うちのテスト環境で再現できればよいのですが。 -- さとう 2008-06-05 (木) 09:17:35
  • 原因がわかった気がしました。
    読み込む前に、デフォルトで例えばfrontpageの新規から作成した場合、文字入力ボックスにfrontpage?と既に入力されていますよね。
    つまり、タイトルが英字だけのページから新規作成しようとするとダメで、日本語のタイトルのページから入力した場合、発生しないようです。 -- 信オンwiki管理人? 2008-06-05 (木) 12:18:33
  • なるほど。それでonlyengで引っかかってきてるんですね。
    でもtemplateプラグインの呼び出しでもそれが起こるときがあるのが、不明なので、調べてみます。template呼び出しするときの動作を、僕が勘違いしているのかもしれません。 -- さとう 2008-06-05 (木) 15:42:41
  • > 使わなくても現状、reCAPTCHAで全部拒否されているようなので。
    そうなんですよ〜。ガンガンにスパムが来るうちも akismet なくても全然大丈夫みたいでして。
    結局、はずしたままつかってます。reCAPTCHAへの対応、本当に感謝しています。
     
    あと、遅くなりましたが、Windwos用のパッチを作りました。
    http://tobysoft.net/archives/pukiwiki/spam_filter_for_windows-0_7_5.patch
    Windows XP SP2 と Vista SP1で確認しました。
    (どうもWindowsは Net/DNSで nameservers を手動で設定する必要があるようでした)
    Unix環境でもパッチを当てたまま使えることを確認して本番環境で使っていますので、よろしければ取り込んでいただければと思います。
    ライセンスは spam_filter.php に準拠いたします。 -- TOBY? 2008-06-07 (土) 10:35:19
  • おおー、Windows用パッチ、ありがとうございます!
    ちと今、template読み込みでの問題もあるため、そっちのデバッグできましたら、取り込んで新バージョンにさせていただきますね。 -- さとう 2008-06-07 (土) 15:54:05
  • 今頃になって大変もうしわけないですが、TOBYさんのWindows用パッチ、やっと組み込みました。template問題は解決していないのですが、スパムちゃんぷるーをデフォルトに組み込みました。 -- さとう 2008-10-31 (金) 17:16:43
  • お久しぶりです。
    最近、自分が管理しているwikiのいくつかがかなり重くなっており(編集画面や更新に10秒程度かかる。閲覧は問題ない)、
    原因がスパムフィルター(はずすと問題なく軽い)にあることがわかりました。
    何か心あたりのようなもの、もしくは何か重くなりそうな原因などわからられないでしょうか? -- TOBY? 2009-03-29 (日) 08:17:03
  • 原因わかりました!
    どうやら、3月前半からDSBLのlist.dsbl.orgがサービス停止したみたいです。このせいで、#ipdnsblやらが極端に重く(というか多分、タイムアウトまで待ってた)なっていたみたいです。→参考:DSBL is GONE | DSBL.org
    list.dsbl.orgを SPAM_FILTER_IPDNSBL_DNS から除外したら問題なく動きました。
     
    その際、XDebugでいろいろ見ていたのですが、#ipcountryは結構重いみたいですね。ローカルでは編集時に負荷の99%くらい占めてました(QuadCore Q6600マシンでも100msec以上)。注意書きが合った方がいいかもしれません。とはいえ、この辺は機能とトレードオフですよねえ…。
    プロファイルとるついてでに、他にけっこう重くて負荷かかっていたプラグインなどがわかったので、よい機会だったかもしれませんw -- TOBY? 2009-03-29 (日) 09:40:13
  • ありがとうございます。早速、修正したものを載せたいと思います。
    自分はあまり、DNSBL使った制限を付けてないもんで、すっかり見落としてました。ハートコンピュータさんのブログで、停止してたことは知ってたのになあ。ダメですね…
    あと、ipcountry重いんですね。もうちょっと軽くできるように見直したいところ。うちところはそんなに負荷について考えないといけないほど書き込みないので、チューニングとかあんまり考えてなかったので参考になりました。 -- さとう 2009-03-30 (月) 10:19:46
  • list.dsbl.org の件、未修正のようですね。
    とても単純なことですけど、悩む人がいるといけないので一応ご報告まで。 -- やちまう? 2010-03-28 (日) 16:33:14
  • はじめまして。spam_filter.phpのテストをローカルでしていたのですが、commentやeditでは正常に動くのですが、「recorder.inc.php」などのプラウグインでも動作するようには出来てないのでしょうか?上でtrackerでは動作しないと書かれていますが…。手を加えるとしたらどのようにしたらいいかヒントなどいただけたら嬉しいです。 -- OXY? 2011-11-04 (金) 16:43:13
  • すいません。自己解決しました。上でmsgを監視してると書いてあるのを見逃してました。「recorder.inc.php」はtrackerの部品を使っているので、tracker側でmsgを設定したところ問題なく動作しました。失礼しました。 -- OXY? 2011-11-04 (金) 22:47:39
  • たびたび失礼します。今回は手動で改造しましたが、もしよろしければ、フィールド名がnameやtextareaなどでも動作するようにカスタマイズできるようになっていると更に汎用性が高まるので、ご検討いただければ幸いです。というより、本当は公式に取り込んでほしいくらいですがw -- OXY? 2011-11-05 (土) 12:58:55
  • んー、なるほど。元々書いた時、pukiwikiのプラグインの作法としてmsgというフィールドが使われるのかなと思っていました。で後から、他のプラグインではそうとは限らないとわかったので、ぜんぜん考えていなくて。
    最近、pukiwiki系はさっぱり触ってなかったのですが、検討項目には追加しておきますね。
    公式のほうも全く動きなしだから、良いのか悪いのか…という感じです。 -- さとう 2011-11-07 (月) 11:59:59
  • 無印pukiwikiが1.5.0にバージョンアップされましたが、spam_filter.phpは対応されますか? -- 2014-07-31 (木) 01:44:00
  • いえ、全く追ってませんでしたので未確認です。PHP5.5対応以外でなにか変わった部分あるんでしょうかね?もしないのならばそのまま使えそうに思うのですが。 -- さとう 2014-07-31 (木) 15:22:40
  • はじめまして、spamfilterを使わせていただいています。
    このコメント欄で以前触れられていたlist.dsbl.orgと同様に、niku.2ch.netが停止しているためにタイムアウトまで待たされ、動作が非常に重くなっていました。
    DNSBLについては門外漢で申し訳ないのですが、他にも使えなくなっているサーバーがあるかもしれません。
    一応報告とさせていただきます。 -- WIXOSS wiki管理人? 2014-08-24 (日) 18:15:30
  • ご報告いただきありがとうございます。
    リストから削除するようにさせていただきます。
    DNSBLが死んでいる場合に次からはタイムアウトまで待たない、とかの処理入れたほうがいいのかもしれませんね…
    ただその前にpukiwiki1.5へとpukiwiki plus!との対応両立はどうするのかとか、pukiwiki本体への対応の仕方を考えないとという感じです。 -- さとう 2014-08-26 (火) 11:06:55
  • spam_filter.phpのデフォルトのDNSBL設定より「dnsbl.spam-champuru.livedoor.com,list.dsbl.org,niku.2ch.net」を削除しました。
    1.4.7plus.zip等の組み込み済みのものには反映していないため注意してください。
    」 -- さとう 2014-08-26 (火) 13:10:34
  • a -- 2016-04-02 (土) 09:26:05
  • 1.5.1やPHP7には対応していますか? -- 2016-06-15 (水) 23:21:08
  • 元々PukiWiki Plus!に対してのもので本家1.5への動作確認も行っていないので不明です。もうしわけないです。
    どこかでPukiWiki Plus!をPHP5.5以上に対応させないといけないので、その時には見なおさざるをえないとは考えていますが。 -- さとう 2016-06-20 (月) 13:46:22
  • #acceptlanguage("dummy")の空の場合かつロシアや中国などの言語から拒否する方法はありますか? -- 2016-07-09 (土) 06:29:00
  • accept-languageが空の場合というのが、普通のブラウザではほぼありえないため、それだけでもうだいぶ「怪しい」と判断して良いと思います。
    ロシアや中国であるかを検出するのはどちらかというとむつかしいので「accept-languageが空」かつ「日本語が含まれていない」とするか、「accept-languageが空」かつ「IPが日本国内ではない」というフィルタにされるのが良いのではと思います。 -- さとう 2016-07-11 (月) 09:47:03
  • ありがとうございます。IPが日本国内ではないというフィルタはhttp://oxynotes.com/?p=8825を参考にやる方法が良いのでしょうか?ちょっと重かったので他に方法があれば知りたいです。 -- 2016-07-14 (木) 11:45:24
  • IPから国コード出すのは比較的重くなるので、軽くしたいということであればaccept-languageだとかuser_agentだとかに「癖」がないかを探して対応できれば良いのですが。 -- さとう 2016-07-21 (木) 14:45:19


このページは管理者しか編集できないように制限を掛けています。