【WordPress】ベーシック認証を設定して外部からのアクセスを拒否する方法|.htaccess・wp-adminのみ制限

ウェブサイトのセキュリティを強化するために、WordPressサイトにベーシック認証を導入する方法を解説します。ベーシック認証は、特定のユーザー名とパスワードを要求してサイトへのアクセスを制限する仕組みです。

この記事でわかること

  • プラグインを使った手軽な設定方法
  • .htaccess を使ったサイト全体の設定
  • wp-adminだけを保護する方法(Ajaxが壊れないようにする注意点込み)
スポンサーリンク

プラグインを使用する方法(簡単!初心者向け)

WordPressサイトにベーシック認証を導入するには、プラグインを使用する方法が簡単でお手軽です。今回は「WP Basic Authentication」を使います。

  1. 管理画面 > プラグイン > 新規プラグインを追加から、検索欄に「WP Basic Authentication」と入力してプラグインを検索し、「今すぐインストール」→「有効化」をクリックします。
    WP Basic Authentication
  2. 有効化すると管理画面に「認証」というメニューが追加されるので、そこから設定を行います。フロントエンドの認証を有効化にチェックを入れて、任意のユーザー名とパスワードを入力します。
    WP Basic Authentication 設定画面
  3. 認証を有効化するとアクセス時にユーザー名とパスワードの入力欄が表示されます。設定した内容で正しくアクセスできることを確認しておきましょう。
    ベーシック認証画面

.htaccessを使用する方法(サイト全体・上級者向け)

まず、ユーザー名とパスワードを保存する .htpasswd ファイルを作成します。オンラインの.htpasswdジェネレーターを使うか、コマンドラインで以下のように生成します。

コマンドライン:.htpasswdファイルを生成
htpasswd -c /path/to/.htpasswd username

次に、WordPressがインストールされているディレクトリの .htaccess に以下のコードを追加します。

.htaccess:サイト全体にベーシック認証をかける
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
  • AuthType Basic:ベーシック認証を有効にします
  • AuthName "Restricted Area":認証ダイアログに表示されるタイトルです
  • AuthUserFile.htpasswd ファイルへの絶対パスです(/path/to/ の部分を実際のパスに置き換えます)
  • Require valid-user.htpasswd に登録された有効なユーザー全員にアクセスを許可します
WordPressの自動生成ブロックの外に書く
Cocoonを含むWordPressは、.htaccess# BEGIN WordPress# END WordPress の間をパーマリンク設定の保存時などに自動で書き換えることがあります。このブロックの内側にベーシック認証の設定を書くと消えてしまうため、必ずブロックの外(上か下)に追加してください。エックスサーバーでは管理画面から直接 .htaccess を編集できます。手順はエックスサーバーの管理画面から.htaccessを編集する方法を参照してください。
ベーシック認証は必ずHTTPS環境で使う
ベーシック認証のユーザー名・パスワードはBase64でエンコードされているだけで、暗号化はされていません。HTTP通信の場合、通信経路上で認証情報が実質的に平文と同じ状態で盗み見られる危険があります。必ずSSL/TLS(HTTPS)が有効な環境で使用してください。

wp-admin管理画面だけをベーシック認証で保護する

フロントエンドは公開したまま、管理画面(wp-admin)だけを第三者からの不正ログイン試行から守りたい場合は、wp-admin ディレクトリの中に別の .htaccess.htpasswd を設置します。

wp-admin/.htaccess:管理画面だけにベーシック認証をかける
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/wp-admin/.htpasswd
Require valid-user

<Files admin-ajax.php>
  Require all granted
</Files>
admin-ajax.phpの除外を忘れずに
wp-admin 配下には、フロントエンド側からもAjax通信で頻繁に呼び出されるadmin-ajax.php が含まれています。これも一律で認証対象にしてしまうと、コメント投稿・お問い合わせフォーム・検索候補などのAjax機能が軒並み動かなくなります。上記のように <Files admin-ajax.php> ブロックで個別に認証を除外しておくのがポイントです。

よくある質問(FAQ)

QWordPressサイト全体にベーシック認証をかけるには?
A.htaccessAuthType BasicAuthNameAuthUserFileRequire valid-userを設定し、.htpasswdファイルにユーザーとハッシュ化パスワードを記述します。エックスサーバーでは管理画面からも設定できます。
Q管理画面(wp-admin)だけベーシック認証をかけることはできますか?
Aできます。wp-adminディレクトリに別途.htaccess.htpasswdを設置します。ただしadmin-ajax.phpへのアクセスは認証から除外しないと、WordPressのAjax機能が動作しなくなる場合があるので注意してください。
Qベーシック認証をかけると検索エンジンのクロールにどう影響しますか?
A認証がかかったページはGooglebotもクロールできなくなります。開発環境や本番移行前のサイトには有効ですが、公開サイトへの適用は検索インデックスが外れる原因になります。特定IPのみ許可するIP制限の方が適切なケースも多いです。

まとめ

  • 手軽に:WP Basic Authenticationプラグイン
  • 本格的に.htaccess(WordPressの自動生成ブロック外に書く)
  • 管理画面だけwp-admin専用の.htaccess(admin-ajax.php除外を忘れずに)
  • 必須:HTTPS環境で使う(Base64は暗号化ではない)

用途に応じて設定範囲を選び、開発環境の保護や本番移行前のアクセス制限などに活用してください。