【PukiWiki】スパム対策で自分以外が編集できないようにパスワード保護

僕はプログラミングの備忘録としてこのブログにコードや設定などの情報を残すようにしているのですが、ブログに書くほどの内容ではない場合はPukiWikiに書くようにしています。

https://www.iehohs.com/pukiwiki/

ちょっと参照したいことがあってWikiにアクセスしてみたところ、見に覚えのない投稿が大量にありました。

どう見てもスパムです。本当にありがとうございました。

調べてみたらAkismetとCAPTHAを使ってスパム対策する方法もあるようですが、API取得ページにアクセスできずで保留。

どうせ自分しか更新しないし、むしろ自分以外に編集されても迷惑なぐらいですので、パスワード保護をかけることにしました。

参考にしたのは下記のリンクです。ほぼこのサイトに記載の手順です。

[PukiWiki]パスワードを入力しないと編集不可にする
PukiWikiで管理者のパスワードを入力しないと、ページの編集不可にさせるよう、認証を行う方法です。 インス…
スポンサーリンク

pukiwiki.ini.phpを編集

やり方は簡単で、PukiWikiがインストールされているディレクトリに入っているpukiwiki.ini.phpを編集してアップロードするのみ。

FFFTPなどで適当にダウンロードしてエディタで編集します。

$auth_users

まずは編集する際に必要なユーザー名とパスワードを設定します。

$auth_usersを探します。例として「foo」「bar」「hoge」が既に記述されていますが、こいつらは使わないのでコメントアウトしておきます。

/////////////////////////////////////////////////
// User definition
$auth_users = array(
	// Username => password
	'username'	=>	'{x-php-md5}5f4dcc3b5aa765d61d8327deb882cf99'
	// 'foo'	=> 'foo_passwd', // Cleartext
	// 'bar'	=> '{x-php-md5}f53ae779077e987718cc285b14dfbe86', // PHP md5() 'bar_passwd'
	// 'hoge'	=> '{SMD5}OzJo/boHwM4q5R+g7LCOx2xGMkFKRVEx',      // LDAP SMD5 'hoge_passwd'
);

パスワードはそのまま記述してもOKですが、セキュリティ的に暗号化しておいた方が安全。

僕は下記のサイトで暗号化させました。使用したいパスワードを入れたら暗号化してくれます。

MD5ハッシュ計算ツール - phpspot

あとは例にあるように {x-php-mg5} を頭につけて暗号化したパスワードをコピペすればいっちょあがり。

$auth_method_type

どこに認証を必要とするかを設定します。とはいってもデフォルトの設定でOKでその確認のみ。

$auth_method_typeがこのようになっていればOKです。これでページ単位での認証が必要になります。

/////////////////////////////////////////////////
// Authentication method

$auth_method_type	= 'pagename';	// By Page name
//$auth_method_type	= 'contents';	// By Page contents

厳密には特定のページ名に対して認証を必要とするという意味で、この後に設定する項目でページ名を指定できるのですが、そこでページ名をワイルドカードで指定することで全ページに対してパスワード保護をかけられる、ということのようです。

下のcontentsの方が有効だとページの内容について正規表現をかけるようです。こっちはページ内容によっては認証に時間がかかって負荷がかかるためおすすめしないそうです。

$edit_auth

あとは認証をオンにして、認証を必要とするページ名の指定です。今回はすべてのページにおいて認証を必要とする設定です。

/////////////////////////////////////////////////
// Edit auth (0:Disable, 1:Enable)
$edit_auth = 1;

$edit_auth_pages = array(
	// Regex		   Username
	'##'	=>	'username',
	// '#BarDiary#'		=> 'bar',
	// '#HogeHoge#'		=> 'hoge',
	// '#(NETABARE|NetaBare)#'	=> 'foo,bar,hoge',
);

$edit_authの値を1にすることで認証が有効になります。

$edit_auth_pagesでは、対象となるページ名を正規表現で表すのですが、「##」にすることで全ページが対象となります。

あとは$auth_usersで設定したユーザー名を指定すればOK。

ちなみにここでも例が3つ記述されていますがすべてコメントアウトしています。

pukiwiki.ini.phpをサーバーにアップロード

編集が終わったら保存し、pukiwiki.ini.phpをFFFTPでアップロードし直します。

それでPukiWikiへアクセスし、新規作成かページ編集画面を進めてパスワード入力画面が出てきたら成功です。

スパム投稿の一括削除

以後はスパムによる投稿が無くなるとはいえ、既に1万件以上のスパム投稿がありました。

PukiWikiの投稿削除は本文を空にして更新することで可能なのですが、これを1万回繰り返すなんてやってられません。

そういうわけでFTPソフトから直接ファイルを削除します。wikiディレクトリの中からスパムの投稿だけ削除していきます。

この時に注意すべきは消す必要のないファイルだけ避けること。ファイル名からは判断できないので、更新日で検索をかけつつやるといいと思います。

幸いにも4月は更新していなかったので、スパムは一括削除で大半を一掃することができました。削除したので更新ページの一覧のほとんどがリンク切れとなりました。

あとdiffディレクトリにも大量のデータが残っているのが気になります。ここには差分データが入っているのですが、こっちはもうしばらく様子を見てからなんとかしようと思います。

とりあえずこれで無事運用できそうです。

コメント

コメントする前にお読みください

プログラミングに関する質問について、詳細なコードはお答えしませんのでご了承ください。
また、迷惑コメント防止のために初回のコメント投稿は承認制です。投稿が反映されるまで少し時間がかかります。