さくらのレンタルサーバに設置したPukiWikiで、編集作業のみパスワード認証する
ドキュメント作成・ページ作成など、とても便利なPukiWiki。
今の私の使い方は、
- 誰でも編集/閲覧OKの開放型
- 公開せず、自分メモ用に.htaccessでアクセス制限かけている閉鎖型
の2種類を設置しているのだが、その中間として「誰にでも見られていいけど、荒らしなどを防ぐために編集と新規ページ作成だけはパスワード認証かけたい」という場合がある。
そのためには、PukiWikiにデフォルトでユーザ認証が組み込まれているので、これを使えばOK……と言いたいのだが、CGI版PHPでPukiWikiを動作させている場合はこの機能を使うことはできない*1。つまり、さくらのレンタルサーバでPukiWikiを動かしている場合、認証機能が使えないわけだ。
このような用途のため、login.inc.phpというプラグインがpikky氏により提供されているのでこれを使ってみる。
ダウンロード
自作プラグイン/login.inc.php - PukiWiki-officialで配布されているのだが、既にリンク切れの模様……。
http://ozuma.sakura.ne.jp/download/20120704login.inc.php.zip
インストール
パスワードの設定
パスワードハッシュの作成
まずはユーザ認証に用いるパスワードのハッシュを作成することにする。
http://pukiwiki.example.org/?plugin=md5 のように、自分が使っているPukiWikiのURL末尾に"?plugin=md5"を付けるとパスワード生成ツールのページに行ける。
Phraseにパスワードを入力し(ここでは hogepassword)、暗号化方式を選択する。PHP sha1が妥当かな。Computeをクリックすると、生成されたパスワードのハッシュが表示されるのでこれを利用する。
pukiwiki.ini.phpの修正
パスワード認証を行うため、pukiwiki.ini.phpを修正する。
まず230行目くらい(PukiWiki Ver.1.4.7の場合)あたりにあるUser definition項目内の$auth_usersを修正し、ID/パスワードを設定する。具体的には、ログインに用いるIDと、先ほど作成したパスワードハッシュを以下のように記述する。
/////////////////////////////////////////////////
// User definition
$auth_users = array(
'hogetarou' => '{x-php-sha1}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
);
続けて、以下の行を追加してセッション管理を有効にする。加えるのはどこでも良いのだが、分かりやすく今書き換えた$auth_usersの直後に加えた。
$auth_type = 'session';session_start(); // PHP SESSION authentication (require login.inc.php plugin)
最後に、編集時にパスワードが必要となるよう、$edit_authを0から1に変更する。また、編集対象の正規表現を'##'とすることで、全ページを対象とすることができる。
/////////////////////////////////////////////////
// Edit auth (0:Disable, 1:Enable)
$edit_auth = 1;
$edit_auth_pages = array(
// Regex Username
'##' => 'hogetarou',
);
おわりに
PukiWikiのページから「編集」しようとして、User Name/Passwordの画面が出てくればOK。