2026年7月3日

WordPress

プラグイン不要!オリジナルUIで実装する特定ページだけをパスワード保護!

プラグイン不要!オリジナルUIで実装する特定ページだけをパスワード保護!

こんな状況、ありませんか?

WordPressサイトの特定のページだけをパスワードで保護したい。
でも、サイト全体を会員制にするほどではない。
ページひとつのために重いプラグインを入れるのも気が進まない。

WordPressには標準でページのパスワード保護機能がありますが、入力フォームのデザインはWordPress標準のもの。テーマのデザインに合わせたオリジナルの入力画面を出すことができないわけです。
今回は、「プラグインなし・テーマの改変なし」で、対象ページだけをパスワード保護する方法を紹介します。PHPファイルを1枚、所定のフォルダに置くだけです。

仕組みの概要

WordPressには「mu-plugins(Must-Use Plugins)」という仕組みがあります。

wp-content/mu-plugins/フォルダにPHPファイルを置くだけで、有効化の操作なしに自動的に読み込まれる、いわば「自家製プラグイン」の仕組みです。
このファイルが、WordPressが特定ページを表示しようとする直前に割り込みます。

テーマファイルにも、データベースにも、wp-config.phpにも手を加えません。ファイルを1枚置くだけ。削除すれば元に戻ります。

パスワードの管理──「ハッシュ」を使う理由

パスワードをファイルに直接書いてしまうと、万一ファイルが流出した際にパスワードが丸見えになります。そこで『ハッシュ』という仕組みを使います。
ハッシュとは一方通行の変換です。

パスワード(例: mypassword)
↓ 変換(bcrypt)
$2y$10$… (ハッシュ値)

※ ハッシュ値からパスワードには絶対に戻せない

ファイルに保存するのはハッシュ値だけです。ログイン時には入力されたパスワードを同じ方法で変換して、保存済みのハッシュと照合するわけです。平文パスワードはどこにも残りません。
今回使用する『bcrypt』は、同じパスワードでも実行するたびに異なるハッシュが生成されますが、照合は正しく行われます。意図的に計算を重くして総当たり攻撃を困難にしている点も特徴です。

導入手順

手順1. パスワードのハッシュを生成する

ターミナルを立ち上げ、SSHでサーバーにログインし、以下のコマンドを実行します。
「設定するパスワード」の部分を実際のパスワードに変えてください。

php -r "echo password_hash('設定するパスワード', PASSWORD_DEFAULT) . PHP_EOL;"

「$2y$10$」から始まる文字列が出力されます。これがハッシュ値です。コピーしておきます。

*PHPのバージョンによってコマンドのパスが異なる場合があります。Xサーバーの場合は「/opt/php-8.3.30/bin/php」のように絶対パスで指定してください。

手順2. 配布ファイルをカスタマイズする

配布ファイル(webgallery-lock.php)を開き、冒頭の 「★ カスタマイズ」とコメントされている4箇所を書き換えます。

// ★ 手順1で生成したハッシュ値を貼り付ける
define('WEBGALLERY_PW_HASH', '$2y$10$ここに貼り付ける');
// ★ 保護したいページのスラッグ(URLの末尾部分)
define('WEBGALLERY_SLUG', 'webgallery');
// ★ Cookie名(このサイト内で他と重複しなければ何でもOK)
define('WEBGALLERY_COOKIE', 'my_gallery_auth');
// ★ Cookieの有効期間(日数)
define('WEBGALLERY_DAYS', 7);

「ページのスラッグ」とは、https://example.com/gallery/であればgalleryの部分です。WordPress管理画面のページ編集画面のURLから確認できます。

手順3. サーバーにアップロードする

カスタマイズしたファイルを以下のパスにアップロードします。

wp-content/mu-plugins/webgallery-lock.php

`mu-plugins` フォルダが存在しない場合は作成してください。FTPクライアントやSSHで作成できます。

手順4. 動作確認

対象ページのURLにブラウザでアクセスして、パスワード入力画面が表示されれば完了です。

ログアウトするには

パスワード入力後はCookieで記憶されます(デフォルト7日間)。
ログアウトしたい場合は、URLに 「?gallery_logout=1」を付けてアクセスするだけです。

https://example.com/gallery/?gallery_logout=1

パスワードを変更するには

新しいパスワードで手順1のコマンドを再実行し、生成されたハッシュ値で「WEBGALLERY_PW_HASH」を差し替えてアップロードするだけです。既存のCookieは自動的に無効になり、次のアクセス時にパスワード入力が求められます。

セキュリティの仕様

MacOS環境では実証済みです。

カテゴリー: Script関連, Tips, WEB公開日:2026年7月 3日 著
DTP Tips
WEB Tips
  • WordPressアップデートしてますか?

    2024年8月9日

取り組み