WP Manifestindependent plugin directory
manifest / security / pageguard

ETBS PageGuard

ページ単位のBASIC認証(ページごとに独立したID/PW)

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/etbsjp/pageguard/archive/refs/heads/dist.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

ページ単位で BASIC 認証をかけられる WordPress プラグインです。ページごとに独立したユーザー名 / パスワードを設定できます。

このバージョンでできること

ページ本体の表示に BASIC 認証をかけるところに加えて、ページの内容やタイトルが本体以外の経路から見えてしまうのを防ぐところ、そして設定画面から対象投稿タイプ・総当たり対策・保護中ページを管理するところまで実装済みです。

まとめると、WordPress の標準の仕組みを通って表示されるものは保護できます。WordPress を通らずに配られるファイル・手作業で登録したリンク・テーマやプラグインが独自に組み立てた一覧は保護できません。 詳しくは「保護できる範囲について」をご覧ください。特にご注意いただきたいのは次の 2 点です。

  • メディアファイル(画像・PDF など)への直リンクは、今後のバージョンでも保護できません。機密性の高いファイルを扱う場合は、サーバー側の設定と併用してください。
  • 保護したページは、サイト表側の検索結果や一覧に表示されなくなります(ログイン中の管理者にも表示されません)。管理画面の固定ページ一覧からはこれまでどおり探せます。

設定画面

WordPress 管理画面の「設定」→「PageGuard」から、次の内容を確認・変更できます。

  • 対象の投稿タイプ — 保護設定の欄をどの投稿タイプの編集画面に出すかを選べます(既定は固定ページのみ)。チェックを外しても、既に保護を設定した投稿の保護は解除されません。
  • 総当たり対策の調整 — 認証に失敗できる回数と、ロックする時間を変更できます(既定は 5 回・900 秒)。
  • 受信診断 — このサーバーでユーザー名 / パスワードが PHP まで正しく届くかどうかを確認できます。届いていない場合や診断できなかった場合は、解決の参考になる .htaccess の記述例を表示します(自動での書き換えは行いません)。
  • ロック中のアクセス元の確認・解除 — 総当たり対策でロックしているアクセス元を一覧表示し、個別に解除できます。
  • 保護中のページの一覧 — 現在保護されている投稿を一覧表示します(一覧のリンクは編集画面のみで、フロント側 URL へはリンクしません)。

また、サイトが HTTPS で運用されていない場合は、設定画面の上部に常に警告を表示します。

特徴

  • ページごとに独立したユーザー名 / パスワード — サイト全体で 1 組だけの一般的な BASIC 認証プラグインと違い、保護したいページそれぞれに別のユーザー名 / パスワードを設定できます。「A 社にはこのページだけ、B 社には別のページだけ」といった渡し分けができます。
  • 設定は投稿編集画面から — 保護したいページの編集画面でユーザー名 / パスワードを入力するだけで有効になります。サーバーの .htaccess を直接編集する必要はありません。
  • パスワードはハッシュ化して保存 — データベースには平文で保存しません(そのため、設定済みのパスワードを後から画面で読み出すことはできません。忘れた場合は再設定してください)。
  • 編集権限があるユーザーは認証をスキップ — そのページを編集できる権限でログイン中の場合は、認証を求められません。
  • 総当たり対策 — ユーザー名 / パスワードの誤りが規定回数続いたアクセス元からは、一定時間のあいだ認証を受け付けません。回数と時間は設定画面から変更でき、ロック中のアクセス元を個別に解除することもできます。
  • 本体以外の経路からの除外 — 保護したページの内容やタイトルは、サイト内の検索結果・アーカイブ一覧・フィード・サイトマップ・REST API にも出ません。ページ本体だけを守っても、これらの経路から中身が読めては意味がないためです。
  • キャッシュの抑止 — 保護したページの応答には、キャッシュを禁止するヘッダーを付けます。認証を通した表示がキャッシュに載って、そのまま他の訪問者へ配られるのを防ぎます。

対象にできる投稿タイプの既定は固定ページのみですが、設定画面から投稿やカスタム投稿タイプ(「お知らせ」「実績」など、テーマやプラグインによって追加された投稿の種類)を追加できます。

保護できる範囲について

保護されるもの

  • ページ本体の表示 — 保護したページの URL に、ユーザー名 / パスワードなしでアクセスすると認証を求められます。
  • 添付ファイルのページ — ファイル 1 つを表示する WordPress のページです。対象は、保護したページに直接アップロードしたファイルだけです。メディアライブラリから再利用したファイルの添付ファイルページは、保護の対象になりません。なお、いずれの場合も、ファイルそのものの URL への直リンクは保護できません(後述)。
  • REST API(WordPress が外部のプログラムへ記事データを渡す仕組み) — 保護したページを ID や URL で直接取得しても、内容は返しません(「ページが見つかりません」を意味する 404 を返します)。一覧・検索・oEmbed(他のサイトに URL を貼ったとき、タイトルや抜粋のカードが表示される仕組み)の各エンドポイントにも、保護したページは出てきません。
  • フィード(サイトの更新情報を配信する仕組み。RSS) — サイト全体のフィード、投稿タイプ別・カテゴリー別などのフィード、コメントのフィードのいずれにも、保護したページの内容とタイトルは出てきません。
  • サイト内の検索結果・アーカイブ一覧 — 保護したページは、サイト内検索の結果や、カテゴリー・タグなどの一覧に出てきません。
  • 前後の記事へのリンク・月別アーカイブの一覧 — 保護したページのタイトルは、隣の記事から辿るリンクや、記事タイトルを並べる月別アーカイブにも出てきません。
  • サイトマップ(検索エンジンにページの一覧を知らせるファイル) — WordPress が出力するサイトマップ(wp-sitemap.xml)に、保護したページの URL は掲載されません。
  • コメント — 保護したページに付いたコメントは、「最近のコメント」ウィジェットやコメントのフィード、REST API から読み取れません(保護したページを認証して開いたときには、これまでどおり表示されます)。

保護されないもの

  • メディアファイルへの直リンク(画像・PDF などのファイル URL に直接アクセスされた場合) — これらのファイルは WordPress を経由せず Web サーバーが直接返すため、今後のバージョンでも保護できません。 URL を知っている人には見えてしまう点にご注意ください。機密性の高いファイルを扱う場合は、サーバー側の設定と併用してください。
  • ナビゲーションメニューに登録したリンク — 保護したページをメニューに載せている場合は、メニュー側からリンクを外してください。 メニューの項目は自動では消えません(WordPress が投稿を探す仕組みを通らず、登録された内容がそのまま出力されるためです)。

それでも残る露出について

上記のほか、次の限界が残ります。

  • プラグインが独自に出力するもの — 検索プラグインや SEO プラグインが、独自のデータベースや索引をもとに出力する検索結果・サイトマップには、タイトルが表示されることがあります。お使いのプラグイン側に、一覧から除外する設定がないかをご確認ください。
  • テーマやプラグインが独自に組み立てる一覧 — WordPress の標準の仕組みを使わず、データベースを直接読んで一覧を出しているものには、タイトルが出ることがあります。お使いのテーマやプラグインが該当するかを見分けるのは難しいため、保護を設定したあと、プライベートウィンドウ(シークレットモード)でトップページ・サイドバー・関連記事欄を一度ご確認ください。 タイトルが残っている場合は、そのテーマ・プラグイン側に除外設定がないかをご確認ください。
  • 保護をかける前に検索エンジンへ登録された情報 — Google などにすでに記録されているページの情報は対象外です。すでに公開していたページを後から保護する場合は、検索エンジン側での削除申請も併せてご検討ください。

検索エンジンへの登録そのものは、ページを公開する前に保護を設定しておけば大きく減らせます。機密性の高い内容は、公開後に保護をかけるのではなく、公開前に保護を設定しておくことをおすすめします。

保護したページの見つけ方

サイト表側の一覧には、管理者がログイン中でも保護したページは表示されません。ページそのものは残っています。

ログインの有無で表示を変えると、その表示がキャッシュに載ったときに、保護したページの一覧が未ログインの訪問者へ配られる恐れがあるためです。

保護したページを探すときは、管理画面の固定ページ一覧、または設定画面(「設定」→「PageGuard」)の「保護中のページ」一覧をご利用ください。管理画面の一覧・検索・編集画面には、今までどおり表示されます。

インストール

現在、GitHub の Releases では配布していません。リポジトリのソースを ZIP でダウンロードして設置します。

展開してできるフォルダの名前は PageGuard-dist のようになります。pageguard にリネームしてから設置してください。

管理画面から ZIP をアップロードする

  1. 本リポジトリのページで、緑色の「Code」ボタン →「Download ZIP」を選び、ZIP ファイルをダウンロードします。
  2. ダウンロードした ZIP ファイルを展開します。PageGuard-dist のような名前のフォルダができます。
  3. フォルダ名を pageguard に変更します。
  4. pageguard フォルダ自体を選択して ZIP 形式に圧縮し直します。(フォルダの中身だけを圧縮すると、正しくインストールできません)
  5. WordPress 管理画面の「プラグイン」→「新規プラグインを追加」を開きます。
  6. 画面上部の「プラグインのアップロード」をクリックし、手順 4 で作成した ZIP ファイルを選択して「今すぐインストール」を実行します。
  7. インストール完了後、「プラグインを有効化」をクリックします。

FTP / SSH でアップロードする

  1. 上の手順 1 〜 3 と同じ方法で、フォルダ名が pageguard になった状態にします。
  2. pageguard フォルダを、WordPress の wp-content/plugins/ 配下にアップロードします。
  3. WordPress 管理画面の「プラグイン」一覧で PageGuard を「有効化」します。

インストール後は、プラグイン一覧の画面で更新を受け取れます。Releases は使わず、GitHub の dist ブランチを見て更新が通知される仕組みです。

動作要件

項目 要件
PHP 7.4 以上

外部ライブラリへの依存はありません。

なお、BASIC 認証は毎回のリクエストでユーザー名 / パスワードを送信します。通信内容が第三者に読まれないよう、HTTPS で運用しているサイトでのご利用を推奨します。