さくらのレンタルサーバに設置したPukiWikiで、編集作業のみパスワード認証する

ドキュメント作成・ページ作成など、とても便利なPukiWiki

今の私の使い方は、

  • 誰でも編集/閲覧OKの開放型
  • 公開せず、自分メモ用に.htaccessでアクセス制限かけている閉鎖型

の2種類を設置しているのだが、その中間として「誰にでも見られていいけど、荒らしなどを防ぐために編集と新規ページ作成だけはパスワード認証かけたい」という場合がある。

そのためには、PukiWikiにデフォルトでユーザ認証が組み込まれているので、これを使えばOK……と言いたいのだが、CGIPHPPukiWikiを動作させている場合はこの機能を使うことはできない*1。つまり、さくらのレンタルサーバPukiWikiを動かしている場合、認証機能が使えないわけだ。

このような用途のため、login.inc.phpというプラグインがpikky氏により提供されているのでこれを使ってみる。

ダウンロード

自作プラグイン/login.inc.php - PukiWiki-officialで配布されているのだが、既にリンク切れの模様……。

http://ozuma.sakura.ne.jp/download/20120704login.inc.php.zip

インストール

  1. plugin/login.inc.php
  2. lib/auth.php
    • libディレクトリに既にあるauth.phpを、配布ファイルで置き換える。

パスワードの設定

パスワードハッシュの作成

まずはユーザ認証に用いるパスワードのハッシュを作成することにする。
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。