DokuWikiのブラックリストの自動更新でスパム対策

DokuWiki DokuWiki
この記事は約3分で読めます。

※当ブログではアフィリエイト広告を利用しています。

PHPベースのオープンソースのウィキソフトウェア DokuWikiのスパム対策について解説します。

DokuWikiではブラックリスト、つまりNGワード集のようなものを使用して、ユーザーの入力内容をチェック・ブロックすることができます。

そのブラックリストを自動更新し、スパム対策を行う方法を紹介します。

なお、今回のバージョンは以下の通りです。

  • DokuWiki 2018-04-22a “Greebo”

DokuWikiのブロック単語のブラックリスト

DokuWikiでは、ブロックする単語のブラックリストを保持し、ユーザーの入力内容をそのブラックリストと照合してスパム対策を行う仕組みになっています。

ブラックリストファイルは、

conf/wordblock.local.conf

です。

このファイルを作成し、設定項目のusewordblock1(チェックオン:デフォルト)にすることで、スパム対策を行うことができます。

ブラックリストの自動更新

ブラックリストは、手動でメンテナンスを行っていくことは大変手間です。

そこで、ウィキメディアプロジェクトのSpam blacklistを使用し、Cronによる自動更新を行います。

Cronで実行するコマンドは以下です。

curl -sk https://meta.wikimedia.org/wiki/Spam_blacklist?action=raw | egrep -v '<?pre>' > conf/wordblock.local.conf

これは、curlコマンドによってHTTPリクエストを投げて、取得結果をブラックリストに反映させています。

ブロック結果をログ出力

ブラックリストによる攻撃のブロック結果をログ出力するには、DokuWiki本体を少しカスタマイズすることで可能です。

以下のコードは、

inc/common.php

内のcheckwordblock関数の一部ですが、3行目に1行処理を追加しています。

if(count($re) && preg_match('#('.join('|', $re).')#si', $text, $matches)) {
    // prepare event data
    io_saveFile($conf['metadir'].'/wordblock.log', strftime($conf['dformat'])."\t".$matches[0]."\t".$ID.$_SERVER['REMOTE_USER']."\t".$_SERVER['REMOTE_ADDR'].":".$_SERVER['SERVER_PORT']."\t".gethostbyaddr($_SERVER['REMOTE_ADDR'])."\t".$_SERVER['HTTP_USER_AGENT']."\n", true);
    $data = array();
    $data['matches']        = $matches;
    $data['userinfo']['ip'] = $INPUT->server->str('REMOTE_ADDR');

これで、

data/meta/wordblock.log

へブロック結果をログ出力できます。

最後に

今回は、DokuWikiのスパム対策について解説しました。

ブロック単語のブラックリストを自動更新すれば、手間が少なくスパム対策できます。

DokuWikiの使い方については、こちらの記事にまとめています。

コメント

タイトルとURLをコピーしました