PukiWikiで特定のページに閲覧制限をかける方法


投稿日:2020年6月7日
  • 0
  • 0



PukiWikiには「:config」という設定用のページが存在します。
このページは各種プラグインなどの設定を行うページで、ほとんどの利用者にとっては見る必要のないページです。

特に設定ファイルなのでbotなどに変更されると修正が面倒です。
ほとんどの場合、configページを編集するのは管理者のみではないでしょうか。

であるならば、自分だけ閲覧・編集できれば良いわけです。
そこでconfigページに閲覧制限をかけようという趣旨です。


configページに閲覧制限をかける方法

まずは閲覧制限を有効にします。
PukiWikiのルートディレクトリにある「pukiwiki.ini.php」を編集します。

/////////////////////////////////////////////////
// Read auth (0:Disable, 1:Enable)
$read_auth = 0;

以下のように1に変更。

/////////////////////////////////////////////////
// Read auth (0:Disable, 1:Enable)
$read_auth = 1;

続いて閲覧制限をかけたいページ名を指定します。

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

いくつかサンプルがありますが、今回は正規表現で行います。

$read_auth_pages = array(
	'/config/'		=> 'hoge',
);

これでページ名に「config」という名前の付くページの閲覧は「hoge」というユーザーにだけ許可されます。

続いて編集者制限も追加します。
これをしておかないと「URLさえわかればページは見られないのに編集はできるという状態になります。」と、公式の解説ページにはありましたが、現在では閲覧宣言がかかったページは自動で編集制限のかかるようです。(editプラグインだけ?)
見えないページを編集できる仕様はどう考えてもおかしいので、一応設定しておきましょう。

上記と同じ用に$edit_authを有効にしてconfigページの編集権限をhogeユーザーへ与えます。

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

$edit_auth_pages = array(
	'/config/'		=> 'hoge',
);

最後に「hogeというユーザーを追加」して、ログイン用のパスワードを設定します。
ユーザー名とパスワードはご自身の環境に合わせて適宜読み替えてください。(この解説のまま入力しないでください。)

/////////////////////////////////////////////////
// User definition
$auth_users = array(
	// Username => password
);

この配列にユーザーネームとパスワードを追加することができます。
セキュリティの関係上、パスワードは平文で保存するのは推奨されません。PukiWikiでは以下のフォーマットで暗号化することが可能です。
パスワードにある{MD5}{x-php-sha1}が暗号形式の指定方法です。

 // SELECT ONE
 //$adminpass = 'pass';            // Cleartext
 //$adminpass = '{CLEARTEXT}pass'; // Cleartext
 //$adminpass = '{SSHA}B78f8i/RpNC+CyFdKLH2odaK8hlPNjlOOUUyMA=='; // SSHA 'pass'
 //$adminpass = '{SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=';              // SHA 'pass'
 //$adminpass = '{SMD5}o7lTdtHFJDqxFOVX09C8QnlmYmZnd2Qx';         // SMD5 'pass'
 //$adminpass = '{MD5}Gh3JHJBzJcaScd3wyUS8cg==';                  // MD5 'pass'
 //$adminpass = '{CRYPT}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//';      // CRYPT 'pass'
 //$adminpass = '{x-php-sha1}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'; // sha1('pass')
 //$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72';          // md5('pass')
 //$adminpass = '{x-php-crypt}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//';      // crypt('pass')

この中では「sha1」が一番セキュリティが高いので利用します。本来はsaltなんかも設定するといいのですが、そのへんはPukiWikiが内部で頑張ってるみたいなのでおまかせします。

パスワードの生成は以下のように打てば出力されます。

var_dump( sha1('pass') ); // 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684

何やらPukiWikiで専用の関数も用意されているようです。第1引数にパスワードの文字列、第2がアルゴリズムを指定します。

pkwk_hash_compute('pass', '{x-php-sha1}')

このコードに{x-php-sha1}を付けて以下のようにします。
サンプルで用意されているユーザー名とパスワードはセキュリティの驚異に繋がるので削除してください。

$auth_users = array(
	hoge => '{x-php-sha1}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'
);

以上で準備は完了です。

これで「config」という名前のつくページにアクセスすると認証が画面が出るようになります。
一応上記の設定で閲覧制限はかけられたのですが、私の環境では対応する言語ファイルの設定がないため、本来表示されるはずの「ユーザー名」や「パスワード」という文字列がありません

そこで言語ファイルも編集します。

ルートディレクトリにある「ja.lng.php」に追記します。

$_loginform_messages['username'] = 'ユーザーネーム';
$_loginform_messages['password'] = 'パスワード';
$_loginform_messages['login'] = 'ログイン';

以上で設定は完了です。
この設定を行い「config」ページにアクセスすると、以下のようなログインが画面が表示されます。

設定したユーザー名をパスワードを入力して初めて閲覧・編集できるようになります。


現在のページを共有する



現在のページに関連する記事

PukiWikiで特定のページに閲覧制限をかける方法 PukiWikiでbodycasheを利用してHTMLコンバートタイムを70倍に高速化
PukiWikiで特定のページに閲覧制限をかける方法 PukiWikiをビジュアルエディタ(TinyMCE)で編集できるプラグインを作成
サーバへPukiWikiをインストール サーバへPukiWikiをインストール
PukiWikiで特定のページに閲覧制限をかける方法 PukiWikiでテンプレート欄に「no template pages」と表示された際の対処法
PukiWikiで表をソートしたい PukiWikiで表をソートしたい
PukiWikiで特定のページに閲覧制限をかける方法 PukiWikiで空のコメントが追加されてしまう場合の対処法
PukiWikiで特定のページに閲覧制限をかける方法 5段階評価プラグインを通して学ぶPukiWikiのプラグインを作成する方法

おすすめの記事

誤って削除したGoogle Chromeのブックマークを復元する方法

誤って削除したGoogle Chromeのブックマークを復元する方法

コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう

コピペから脱出!iptablesの仕組みを理解して環境に合わせた設…

「アマレコTV」でWindows 10のPC画面に表示されている動画を撮影する方法

「アマレコTV」でWindows 10のPC画面に表示されている動画を撮…

ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて

ユーザーの環境変数を設定するbashの設定ファイルと、カスタム…

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法

「このアプリがシャットダウンを妨げています」と表示されるがアプリがわからない場合の対処法

「このアプリがシャットダウンを妨げています」と表示されるが…

Googlebotを手懐ける!robots.txtの書き方とrobots.txtテスターの使い方

Googlebotを手懐ける!robots.txtの書き方とrobots.txtテスター…

Custom Post Type UIでカスタム投稿を作って、誰でも簡単に編集できる投稿画面を作る方法

Custom Post Type UIでカスタム投稿を作って、誰でも簡単に編集…


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。