Basic認証(ベーシック認証) は、URLにアクセスしたときにIDとパスワードの入力を求めるアクセス制限の方法です。Apacheサーバーでは .htaccess.htpasswd ファイルで設定できます。

用途

設定ファイルの構成

/var/www/html/          ← Webルートディレクトリ
├── .htaccess           ← 認証設定(アクセス制限をかけるディレクトリに置く)
└── .htpasswd           ← ユーザー名とハッシュ化パスワードの一覧
.htpasswd はWebルートの外(ドキュメントルートの外)に置くのが理想ですが、.htaccess でアクセスを禁止する方法でも対処できます。

.htpasswdファイルの作成

htpasswdコマンドで生成(推奨)

# 新規ファイルを作成してユーザーを追加(-c オプション)
htpasswd -c /path/to/.htpasswd username

# 既存ファイルにユーザーを追加(-c なし)
htpasswd /path/to/.htpasswd username2

# bcryptハッシュを使う場合(より安全)
htpasswd -B /path/to/.htpasswd username
実行後にパスワードの入力を求められます。.htpasswd の内容は以下のような形式になります:

username:$apr1$xxxxx$xxxxxxxxxxxxxxxxxxxxxxx
username2:$2y$05$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
### オンラインツールで生成

サーバーへのSSHアクセスができない場合、「htpasswd generator」で検索するとブラウザ上でハッシュを生成できるツールがあります。生成されたハッシュを .htpasswd に貼り付けます。

.htaccessの設定

基本的な設定

ディレクティブ説明
AuthType Basic認証方式(Basicを指定)
AuthNameブラウザのダイアログに表示される説明文
AuthUserFile.htpasswd ファイルの絶対パス
Require valid-user有効なユーザーのアクセスを許可

重要: AuthUserFile には絶対パスを指定します。相対パスは動作しません。サーバー上のパスは phpinfo()pwd コマンドで確認できます。

特定ユーザーのみ許可する

AuthType Basic
AuthName "Admin Only"
AuthUserFile /var/www/.htpasswd
Require user admin
Require user ユーザー名 で特定ユーザーのみを許可できます。

特定IPは認証なし・それ以外は認証あり

AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd

# Apache 2.4以降
<RequireAny>
  Require ip 192.168.1.0/24
  Require valid-user
</RequireAny>
社内ネットワークのIPからはパスワードなし・外部からはパスワード入力を求める設定例です。

WordPressへのBasic認証設定時の注意

WordPressにBasic認証をかけると、WordPressの内部リクエスト(cronなど)が認証で弾かれることがあります。

WordPress管理画面(/wp-admin/)を除外する設定:

# ルートに置く .htaccess
AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd

<Files wp-login.php>
  Require all denied
</Files>

# wp-adminディレクトリへのアクセスは許可
<RequireAny>
  Require ip 自社IPアドレス
  Require valid-user
</RequireAny>
また、XMLRPCへの直接アクセスをBasic認証で保護することで、ブルートフォース攻撃も防げます。

.htpasswdファイルの保護

.htpasswd がWebルート内にある場合、直接アクセスされないように .htaccess に以下を追加します:

<Files .htpasswd>
  Require all denied
</Files>
## よくあるエラーと対処

500 Internal Server Error

.htaccess の記述ミスが原因であることがほとんどです。

確認ポイント: - AuthUserFile のパスが正しいか(絶対パスを使っているか) - .htpasswd が存在し、読み取り可能なパーミッションか(644推奨) - Apache の AllowOverrideAll または AuthConfig になっているか

パスワードを入力しても認証されない

Basic認証の限界

Basic認証は簡易的なアクセス制限です。通信がHTTPSでない場合、ID・パスワードが平文で送信されます。本番環境では必ずHTTPS(SSL)と組み合わせて使用してください。