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

おすすめの記事

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

初めてでも理解できるようになる「Google Chrome機能拡張の開発」

初めてでも理解できるようになる「Google Chrome機能拡張の開発」

シンプルなスパムコメント対策プラグイン「Simple AntiSpam」を作成しました

シンプルなスパムコメント対策プラグイン「Simple AntiSpam」を…

開発の最前線でクリエイター・エンジニアに必要なプログラミング言語

開発の最前線でクリエイター・エンジニアに必要なプログラミン…

Windows 10でネットワークが不安定になった際の対策まとめ

Windows 10でネットワークが不安定になった際の対策まとめ

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単語200

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単…

Excelでセルとセルの間をダブルクリックすると移動する機能を停止する方法

Excelでセルとセルの間をダブルクリックすると移動する機能を停…

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

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


コメントを残す

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

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