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のプラグインを作成する方法

おすすめの記事

公式ドキュメントよりも詳しいTinyMCEの使い方(基本編)

公式ドキュメントよりも詳しいTinyMCEの使い方(基本編)

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

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

サーバの処理を自動実行するcronの仕組みと応用法

サーバの処理を自動実行するcronの仕組みと応用法

本気で作りたい人向け、WordPressプラグインの作成方法

本気で作りたい人向け、WordPressプラグインの作成方法

Apacheのmod_expiresでファイルタイプごとにキャッシュをコントロールする方法

Apacheのmod_expiresでファイルタイプごとにキャッシュをコント…

エンティティとデコード用プラグイン「Entity Decode Button」を作成しました

エンティティとデコード用プラグイン「Entity Decode Button」…

Adblock対策プラグイン「End of Adblock Cycle」を作成しました

Adblock対策プラグイン「End of Adblock Cycle」を作成しました

WordPressで手軽にAdblock対策するならBetter Stop AdBlockで決まり!

WordPressで手軽にAdblock対策するならBetter Stop AdBlockで決…


コメントを残す

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

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