[修正版] PukiWiki もブラックリスト対応に

| 1 Comment | 1 TrackBack

昨日書いた方法ですが、まずいことが発覚しました。 どうまずいかというと、昨日の方法に対応しているプラグインが 4 つしかなく、プラグインによっては書き込みを許してしまう場合があります。

今回書いた修正を行えば、昨日書いた方法に関しては行う必要はありません。また、昨日の方法のみを行われた場合は、対策が不完全ですので、今回の対策も行ってください。

対策として、ブラックリストなプロクシの場合は、Pukiwiki を読み込み専用にしてしまう方法をとることにしました。正確には、PKWK_READONLY というフラグをたてる方法です。

これにより、プラグイン側が書き込みフォームを出さなくなります。さらに、実際にファイルに書き込むときに呼ばれる page_write という内部関数が動作しないようになります。

ただし、トラックバックを受けたときに関しては処理が異なっています。トラックバックを受ける設定にして使っていて、ブラックリストなプロクシからのトラックバックを受けないようにするには、後述する方法で、対応する必要があります。

お急ぎの方は、以下のファイルをご利用ください。

pukiwiki.ini.php 入れ換え用

pukiwiki.ini.php に対するパッチ:

pukiwiki.ini.php

今回さわるのは、pukiwiki.ini.php です。

まずは、何らかのエディタで pukiwiki.ini.php を開いてください。

これからいじる場所

"// Security settings" という部分を探してください。

以下の画像のような場所が見つかると思います。

コピペする

見つけたら、以下の枠に囲んだコードをコピペします。

// check if blacklisted
$check_if_blacklisted = 1;

$is_blacklisted = 0;
if ($check_if_blacklisted) {
    $dnsbl_check = array("list.dsbl.org", "niku.2ch.net");
    $dnsbl_target = $_SERVER['REMOTE_ADDR'];
    if ($dnsbl_target) {
        $quads = explode(".", $dnsbl_target);
        $rip = $quads[3].".".$quads[2].".".$quads[1].".".$quads[0];
        for ($i = 0; $i < count($dnsbl_check); $i++) {
            if (checkdnsrr($rip.".".$dnsbl_check[$i] . '.',"A")) {
                $is_blacklisted = 1;
            }
        }
    } else {
        // XXX: not reached
        $is_blacklisted = 1;
    }
}

// if blacklisted
if ($is_blacklisted) {
    // make it read only mode
    define('PKWK_READONLY', 1);
}

コピペ後

コピペ後は以下の画像のようになります。

トラックバックを受ける場合

Pukiwiki の設定として、トラックバックを受けるようにしている場合は、さらに修正が必要です。"$trackback = 1;" となっている場所を探してください。

トラックバックを受け付けてない場合は、以下の書き換えをしなくて結構です。

以下の画像のような場所が見つかると思います。

トラックバックを受ける場合(コピペ)

見つけたら、以下の枠に囲んだコードをコピペします。

if ($is_blacklisted) {
    $trackback = 0;
}

トラックバックを受ける場合(コピペ後)

コピペ後は以下の画像のようになります。

おしまい

これで修正は終わりです。

ファイルを保存して、修正後の pukiwiki.ini.php をアップロードしましょう。

そして、公開プロクシから書き込めるかチェックしてみてください。

有名な公開プロクシとしては、P2P技術で“2ちゃんねる効果”を軽減できる無料CDNが正式公開というのがあります。

PukiWiki入門 まとめサイトをつくろう!
増井 雄一郎 天野 龍司 大河原 哲 miko
翔泳社 (2006/04/13)

1 TrackBack

TrackBack URL: http://blog.woremacx.com/MT/mt-tb.cgi/45

1 Comment

つまらんツッコミで悪いけど、$is_blacklisted = 1; になったらbreakしていいような。
それとTCP接続してるわけで$_SERVER['REMOTE_ADDR']が空文字列はありえんかと。

Leave a comment