DokuWiki.biz

オープンソースのウィキソフトウェア「DokuWiki」の設定、テンプレートカスタマイズ、プラグイン開発などのメモ書き。

ユーザ用ツール

サイト用ツール


maintenance:blacklist

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

このページでは、ブロック単語のブラックリストを自動更新し、Wikiスパム対策を行う方法について説明する。

インターネット上に公開するサイトの場合、スパム対策は必須である。DokuWikiではブラックリスト、つまりNGワード集のようなものを使用して、ユーザーの入力内容をチェック・ブロックすることができる。

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

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

ブラックリストファイルは、conf/wordblock.local.confである。このファイルを作成し、設定項目usewordblock1(チェックオン:デフォルト)にすることで、Wikiスパム対策を行うことができる。

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

ブラックリストは、手動でメンテナンスを行っていくことは大変手間である。そこで、ウィキメディアプロジェクトのSpam blacklistを使用し、Cronによる自動更新を行う。

Cronによって実行するコマンドは以下のようになる。これは、curlコマンドによって、HTTPリクエストを投げて取得結果をブラックリストに反映させていく仕組みである。

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

ブロック結果をログ出力

ブラックリストによる攻撃のブロック結果をログとして出力するには、DokuWiki本体を少しカスタマイズすることで可能である。以下のコードは、inc/common.php内のcheckwordblock関数の一部だが、3行目に1行処理を追加し、data/meta/wordblock.logへ出力するようにしている。

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

参考ページ

maintenance/blacklist.txt · 最終更新: 2018/08/31 10:15:51 by admin