説明
WordPress は、ログインしなくても誰でも見られる次のような場所で、ユーザーのログイン名や、そこから作られた名前を出しています。REST API、oEmbed、ユーザーのサイトマップ、?author= の転送、そしてログイン画面の文言です。ログイン名が分かってしまうと、あとはパスワードを当てるだけになります。
ETBS Account Guard は、これらの場所をひとつずつ塞ぎます。項目ごとに「設定 > ETBS Account Guard」から ON / OFF できます。
塞げる場所
- REST API – ログインしていない訪問者に対して、ユーザー関連のルート (
/wp/v2/usersとその配下) を返しません。_embedで投稿に埋め込まれる投稿者の情報も同じです。存在するユーザー ID と存在しない ID で、応答が同じになります。ブロックエディターを含め、ログイン中のユーザーには影響しません。 - oEmbed – 埋め込まれた投稿の投稿者名と投稿者の URL を、サイト名とトップページの URL に置き換えます。
- サイトマップ – ユーザーのサイトマップ (
wp-sitemap-users-1.xml) を出しません。 - クラス名 – 登録ユーザーのコメントに付く
comment-author-{name}と、投稿者ページのauthor-{name}を外します。ユーザー ID を含むクラス名は残します。 - 投稿者 ID のリンク –
/?author=1を投稿者ページではなくトップページへ転送します。管理画面には影響しません。 - ログインエラー – 存在しないユーザー名と、パスワードの誤りとで、同じ文言を出します。REST API へのアプリケーションパスワード (BASIC 認証) の失敗も同じエラーにします。パスワード再発行の画面では、登録されていないユーザー名やメールアドレスを入力しても、登録済みのときと同じ画面を出します。登録済みのユーザーには、これまでどおり再設定のメールが届きます。画像認証やログインロックなど、他のプラグインが出すエラーはそのまま表示します。
- 投稿者ページ (既定は OFF) – ログインしていない訪問者に対して、投稿者ページ (
/author/{name}/) を404にします。ON にする前に、サイトの投稿を開いて投稿者名をクリックしてください。アドレスに/author/を含むページが開く場合、お使いのテーマは投稿者ページへリンクしており、そのリンクは「ページが見つかりません」になります。ログイン中は引き続き投稿者ページが表示されるので、結果はブラウザーのプライベートウィンドウで確かめてください。 - 公開されている名前 – 表示名またはニックネームがログイン名と同じユーザーを、設定画面に一覧で出します。変更はご自身で行ってください。自動では何も変えません。
アクセス制限 (IP 制限)
「設定 > ETBS Account Guard」の「アクセス制限」タブで、権限ごと、特定のユーザーごと、またはその両方に IP アドレスの確認を求められます。administrator の権限そのものは常に制限なしです。特定の管理者は、そのユーザーの編集画面から制限できます。ユーザー自身の設定は、その権限の設定よりも常に優先します。複数の権限を通じて複数の条件を課されたユーザーは、そのすべてを満たす必要があります。
- ログイン時 (wp-login.php、XML-RPC、そのほかユーザー名とパスワードで認証するすべて) – 許可した一覧に無いアドレスから接続した対象アカウントは、パスワードの誤りと同じ文言で拒否します。理由は明かしません。これは画像認証プラグイン (SiteGuard WP Plugin など) の判定が済んだ後に行うため、画像認証の失敗と IP 制限とが見分けられることはありません。
- ログイン後の毎回のアクセス (管理画面、admin-ajax.php、admin-post.php、フロント、REST API) – 許可していないアドレスから接続した対象アカウントは、そのセッションだけを破棄し、ログインしていない状態としてそのまま処理を続けます。エラー画面で止めないため、ログインを必要としない公開ページやフォームはこれまでどおり動きます。
- アプリケーションパスワード は、対象のユーザーでは使えなくなります。REST API のリクエストごとに、あらためて判定します。
- IP の一覧は、サイト全体の一覧と、特定のユーザーにだけ追加したアドレスとを合わせたものです。1行につき IPv4または IPv6のアドレス1つか、CIDR 表記の範囲1つを書きます。
#より後ろはメモです。判定には、サーバー自身がその接続について見ているアドレス (REMOTE_ADDR) だけを使います。X-Forwarded-Forのようなヘッダーは、訪問者が自分で設定できるため、一切読みません。 - 「アクセス制限」タブの保存と、ユーザー編集画面での本人の制限の保存は、次の場合に理由を添えて拒否します。制限されていない管理者 (またはオプションを管理できる他のユーザー) が1人もいなくなるとき、いま保存しているその接続元から入れなくなるとき、そして BASIC 認証 (下記) で、そのモードになるユーザーがまだ自分の資格情報を設定していないときです。
- 直近100件の拒否を「拒否の記録」タブに表示します。
- アクセス制限が想定外の状態になった場合は、誤って誰かを締め出すのではなく、自分自身を停止し、「アクセス制限」タブと、それ以外の管理画面では管理画面通知として警告を出します。
アクセス制限 (BASIC 認証)
BASIC 認証は、権限ごと、または特定のユーザーごとに選べる3つ目のモードで、「制限なし」「IP 制限」と並びます。通常の WordPress のログインに加えて、ブラウザー標準のサインイン画面で、別のユーザー名とパスワード (WordPress のログインとは別物) を求めます。
- 資格情報 – ユーザーごとに、自分の BASIC 認証の ID とパスワードを、そのユーザーの編集画面で設定します。ID はサイト内で重複できません。パスワードは、いったん保存すると二度と表示されません。
- 確認画面 – ログイン後、そのブラウザーのセッションで BASIC 認証の資格情報をまだ渡していない BASIC モードのユーザーは、ブラウザー自身のユーザー名・パスワードの入力画面を出す画面に送られます。独自のログインフォームではありません。正しく答えると、開こうとしていた管理画面に戻ります。
- WordPress のセッションは保たれます – IP 制限と違い、BASIC 認証の資格情報が無い、または誤っている場合でも、そのリクエストがログインしていない扱いになるだけで、ユーザーがログアウトさせられることはありません。
- 自分自身のアカウントを設定する – ご自身の「プロフィール」画面を開いてください。ツールバーや管理画面メニューからも開けます。ここで他のユーザーに対して表示しているのと同じ「アクセス制限」の区画が、オプションを管理できる人にはそちらにも表示されます。自分自身を BASIC 認証モードで保存する前に、「確認」を押し、実際のサインイン画面を通して新しい ID とパスワードを確かめてください。
- 受信の診断 – サーバーの構成によっては、BASIC 認証のヘッダーが WordPress まで渡されないことや、サーバー側ですでにサイト全体に BASIC 認証がかかっていることがあります。これを調べる診断が「アクセス制限」タブにあり、成功するまで BASIC 認証モードは有効にできません。必要なサーバー向けに
.htaccessの記述例を表示しますので、内容をご確認のうえ、ご自身で追加してください。このプラグインが.htaccessを自動で書き換えることはありません。 - HTTPS を推奨します – BASIC 認証は、リクエストのたびにユーザー名とパスワードを送ります。サイトが HTTPS を使っていない場合は警告を出しますが、保存は止めません。
非常用スイッチ
アクセス制限で全員が入れなくなった場合は、wp-config.php に define( 'ACGD_DISABLE_RESTRICTION', true ); を追加してください。止まるのはアクセス制限だけで、ログイン名の保護は動作し続けます。
やらないこと
二段階認証、ログイン試行回数の制限、画像認証、ファイアウォールは含みません。これらには専用のセキュリティプラグインをお使いください。?author= の転送とログイン画面の文言は、そうしたプラグインの一部と重なりますが、両方を入れても害はありません。
既知の限界
- WooCommerce のマイアカウントのパスワード再発行フォームは独自の文言を出すため、対象外です。WooCommerce のログインフォームは対象です。
- テーマが出力する投稿者ページへのリンクには、投稿者ページの URL に使われる名前がそのまま入ります。
- SiteGuard WP Plugin も併せてお使いの場合は、「ログイン詳細エラーメッセージの無効化」を ON のままにしてください (単一サイトでは既定で ON です)。OFF にすると、SiteGuard の画像認証のエラー文言が、存在するアカウントにだけ、また別に、制限対象アカウント自身の IP 制限にだけ出ます。これは SiteGuard 自身の挙動で、このプラグインでは変えられません。
- パスワード再発行の画面で、存在するアカウント宛のメールを送れなかった場合は、そのエラーをそのまま表示します。サイトのメール送信の不具合に気付けるようにするためです。このエラーと、メールを送る場合と送らない場合の応答時間の差は残ります。
- ログイン画面では、WordPress はアカウントが存在するときだけパスワードを照合するため、存在するアカウントと未知のアカウントとで応答時間に差が出ることがあります。パスワード再発行の画面の応答時間の差と同じく、これはまだ対応していません。
- 企業のリモートブラウザー分離サービスを経由する端末で、BASIC 認証の確認画面 (ブラウザー標準のサインイン画面) を表示できるかどうかは未検証です。そうしたサイトで頼りにする前に、ご自身でお確かめください。
スクリーンショット





インストール
etbs-account-guardフォルダーを/wp-content/plugins/ディレクトリにアップロードします。- 「プラグイン」画面からプラグインを有効化します。
- 保護はすぐに有効になります。「設定 > ETBS Account Guard」で内容をご確認ください。
FAQ
-
ブロックエディターに影響しますか ?
-
いいえ。REST API のユーザー関連のルートは、ログイン中のユーザーには引き続き利用できます。ブロックエディターの投稿者の区画は、これを使っています。
-
項目を OFF にしました。それでもプラグインは何か変えますか ?
-
いいえ。OFF にした項目は、WordPress 本体そのままの動作に戻ります。
-
プラグインを削除すると、何が消えますか ?
-
プラグインを削除すると、アクセス制限の拒否の記録、BASIC 認証の受信の診断の結果 (次に実行すれば作り直されます)、いくつかの内部の記録とキャッシュした件数、そして WordPress.org 以外で配布していた以前の版が残した更新確認のデータがあれば、それらが消えます。権限ごと・ユーザーごとのアクセス制限のモード、IP の一覧、BASIC 認証の ID とパスワードのハッシュを含め、設定はすべて残るので、入れ直せばそのまま戻ります。
評価
このプラグインにはレビューがありません。
貢献者と開発者
変更履歴
1.2.2
- [ 不具合修正 ] 「拒否の記録」タブの日時と、受信の診断の「前回の実行日時」が、サイトのタイムゾーンではなく UTC で表示されていた問題を修正しました。
- [ その他 ] 同梱の日本語訳を、WordPress.org の日本語翻訳スタイルガイドに沿うよう更新しました。
1.2.1
- [ 不具合修正 ] Authorization ヘッダーを PHP_AUTH_USER に展開しないサーバーで、BASIC 認証の ID が送られたまま照合されていたため、連続した空白を含む ID が保存はできてもサインイン画面で決して通らなかった問題を修正しました。
- [ 不具合修正 ] 送信された IP アドレスの一覧に、有効な UTF-8でない部分が1つでもあると、エラーも出さずに一覧全体が捨てられていた問題を修正しました。該当する行だけを報告するようにしました。
- [ 仕様変更 ] BASIC 認証の画面のインラインスタイルを wp_add_inline_style() 経由で出力するようにし、送信された資格情報、IP の一覧、転送先を受け取った時点でサニタイズするようにしました。
- [ その他 ] PHP の下限バージョンを7.3と明示しました。
1.2.0
- [ 仕様変更 ] 同梱していた更新チェッカーを外しました。更新は WordPress.org から配信されます。
- [ 仕様変更 ] ダッシュボードウィジェットを外しました。表示名またはニックネームがログイン名と同じユーザーの一覧は設定画面に残り、アクセス制限が停止した場合は管理画面通知でお知らせします。
- [ その他 ] WordPress.org 以外で配布していた以前の版が残した、更新確認の予定を削除するようにしました。
1.1.1
- [ 不具合修正 ] BASIC 認証の資格情報の「確認」ボタンが、先にモードを「BASIC 認証」へ切り替えていないと動かず、「制限なし」や「IP 制限」のままでは管理者が新しい資格情報を確かめられなかった問題を修正しました。
- [ 不具合修正 ] BASIC 認証の資格情報の「確認」ボタンで、WordPress 本体の「行った変更が保存されません」という警告が出ても、入力したばかりの ID とパスワードが保たれることが分からなかった問題を修正しました。ボタンの横にその旨の説明を追加しました。
- [ その他 ] サーバー側ですでに BASIC 認証がかかっているサイトで、BASIC 認証の確認待ちを調べる際に管理画面のリクエストごとに行っていた不要なデータベースの読み取りを省きました。
1.1.0
- [ 機能追加 ] アクセス制限を追加しました。権限ごと、または特定のユーザーごとに、許可した IP アドレスからの接続を求められます。拒否の記録と、制限を止める非常用スイッチが付きます。
- [ 機能追加 ] アクセス制限の3つ目のモードとして BASIC 認証を追加しました。権限ごと、または特定のユーザーごとに、別のユーザー名とパスワードでブラウザーのサインイン画面に答えることを求められます。受信の診断、自分の資格情報を設定するための確認画面、そのための拒否の記録が付きます。
1.0.0
- 最初のリリースです。
