【 更新 】おすすめ記事はこちら

ベーシック認証!「.htaccess」と「.htpasswd」の正しい書き方

「公開前のサイト」や「会員制のページ」など、

一部のユーザーにだけアクセスを許可したいときは「ベーシック認証」がおすすめ。

IPアドレスによるアクセス制限もありますが、VPNの用意には時間とお金がかかります。

利用者が少ないときは「ベーシック認証」の方がスムーズです。

以下は、本記事に適したケース。

  1. ユーザーが「数名~数十名(これ以上は非推奨)」いる
  2. 特定のページ(もしくはディレクトリ)だけ制限したい

ログイン画面を制限する場合は、こちらの記事をご覧ください。

ベーシック認証とは

「ベーシック(Basic)認証」とは、通信プロトコルであるHTTPが用意している「認証方式」のひとつ

最も基本的な認証の仕組みとして「基本認証」とも呼ばれています。

認証に「Base64」という64種類の英数字と記号を用いた形式が使われているのが特長。

「ユーザーID:パスワード」と組み合わせた情報を、Base64でエンコード(変換)し送信するシステムになっています。

Webサーバーやブラウザに広く対応し、設定が簡単なことからアクセス制限に多く取り入れられている方法です。

一方で、SSL化されていない「HTTP」のままで認証を行うと、暗号化されていない状態でパスワードを扱うことになるので、要注意。

「HTTP」で入力されたサイトにも同じことが言えます。

悪意のあるユーザーに読み取られる危険があるため「HTTP(s)」と「ベーシック認証」の環境を揃えた上で導入するようにしてください

「.htaccess」の書き方

「.htaccess」がないときは、メモ帳などで作成します。

以下の内容を自分の環境に置き換えて、ファイルに追記してください。

# ベーシック認証
AuthType Basic
AuthName "Basic authentication."
AuthUserFile /userpath/.htpasswd
require valid-user

AuthType

ベーシック認証方式をとるため「Basic」としています。

AuthType Basic

AuthName

今回の認証名を任意で指定します。ダブルクォートで囲むのを忘れずに

AuthName "Basic authentication."

日本語は文字化けすることがあるので「半角英数字」を使ってください。

AuthUserFile

ルートディレクトリから「.htpasswd」までのパスを指定します。

AuthUserFile /userpath/.htpasswd

「.htaccess」とは別に用意するログイン情報のファイルが「.htpasswd」になります。

パスを調べるときは、PHPファイルを任意の名前で作成し、以下のコードを記述。

調べたいディレクトリに設置します。

<?php echo __FILE__; ?>

アドレスバーに拡張子まで入力。

https://サイトURL/ファイル名.php

ページに表示されたパスを/userpath/に貼り付けてください。

require

「ユーザーID」と「パスワード」で認証された、全てのユーザーのアクセスを許可しています。

require valid-user

特定のユーザーに絞りたいときは「require user ID」とします。IDは「.htpasswd」に書いた「ユーザーID」です。

Files

「.htpasswd」と「.htaccess」へのアクセスを全て拒否する記述です。

ルートディレクトリなどに設置してください。

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>

これにより外部からの書き換えは不可となります

「.htpasswd」の書き方

「.htpasswd」がないときは、メモ帳などで作成します。

「ユーザーID:パスワード」の順に入力。

ユーザーID:任意のパスワード

このとき、必ず、専用ツール(LUFTTOOLSなど)で暗号化したパスワードを使います

通信内容を盗み見られる危険があるため、暗号化前のものは貼り付けないでください。

ファイルを設置

「.htaccess」をアクセス制限したいディレクトリに、「.htpasswd」を任意のディレクトリにそれぞれ配置します。

「.htpasswd」はサイトとは別のディレクトリに入れて管理する方がスマート。

参考までになりますが、サーバー側からベーシック認証を設定すると、ファイルが自動生成されます。

どこに作成するのがいいか迷ったときは、そちらの構成を見ると参考になるかもしれません。

ベーシック認証画面

「.htaccess」と「.htpasswd」の設置が終わると、ダイアログが出るようになります。

こちらが「ベーシック認証」がかかった状態です。

ベーシック認証ダイアログ

「ユーザーID」と専用ツールで「暗号化する前のパスワード」を入力し、ページにアクセスできればOK。

ミスがあるときは「500 Internal Server Error」になるので、入力内容を見直してください。

サーバーから設定(任意)

エックスサーバーを使って設定します。

アクセス制限

サーバーにある「アクセス制限」をクリック。

サーバーのアクセス制限メニュー

「設定対象ドメイン」を選択後、制限したいディレクトリを「ON」にして「設定する」。

制限するディレクトリをON

ユーザー設定

つづいて「ユーザー設定」でベーシック認証時に入力する情報を設定します。

ログインユーザー設定

ベーシック認証で入力する「ユーザーID」と「パスワード」を決めます。

ユーザーIDとパスワードを入力

「確認画面へ進む」「追加する」で完了です。

おわりに

「ベーシック認証」の導入方法は大きく分けて2つ。

ファイルを直接編集するか、サーバーの管理画面で操作するかのどちらかになります。

安心なのは、コードで指定する方法を覚えておくこと。

サーバーによって画面操作に違いがあるため、契約を変えたときやクライアントサーバーに左右されずに対応できますよ。

最後に気をつけたいのは、「ベーシック認証」が機密情報の取り扱いに向かないという点。

あくまでも簡易的な認証方式になるため、高度なセキュリティ対策が必要な企業の内部情報などは掲載できません。

会員向けのお知らせ、公開前の動作確認ページに使うようにしてください。