Basic認証の設定方法~.htaccessと.htpasswdを作成する~

Webサイトにアクセス制限をかけるために、Basic認証を取り入れる方法を見ていきます。Basic認証について基本的な知識を整理しながら、.htaccessと.htpasswdの作成方法を確認します。

Basic認証の基本

Basic認証とは、Webページにアクセス制限をかけることができる認証方法の一つです。設定を記述した.htaccessを設置したディレクトリがBasic認証の範囲となります。

アクセス制御はブラウザを閉じるまで有効です。

Basic認証で制限されているディレクトリには検索エンジンのクローラーもアクセスできないため、会員サイトや個人情報を取り扱うWebサイトに適しています。

サーバーを横断した設定はできません。

Basic認証はBase64

Basic認証はBase64という文字コードを用いて通信を行います。Base64とは、簡易的な通信を行う際の文字コードのことで、アルファベット・数字・特定の記号のみの64種類の文字が利用可能です。

ただし、素のアルファベット・数字・記号の状態で通信されてしまい、非SSLサイトの場合、外部からログイン情報を覗き見られてしまう恐れがあります。

Base64の64文字とは

  • アルファベットの大文字(26文字)
  • 小文字(26文字)
  • 数字(10文字)
  • 「+」「/」の2つの記号

Basic認証の設定方法

  • ルートディレクトリ
    • test
      • index.html //アクセス制限をかける

仮に、サーバーに設置したtestフォルダ内にあるindex.htmlにアクセス制限をかけていく方法を見てみます。

.htaccessを作成

  • ルートディレクトリ
    • test
      • index.html
      • .htaccess //ここに作成

FTPでベーシック認証をかけたいディレクトリにアクセスし、右クリックから新しいファイルの作成をクリックすると表示されるダイアログに.htaccessと入力してOKする。

.htaccessファイル作成には次のような特徴があります。

  • プレーンなテキストのためテキストエディタで編集できる。
  • 文字コードは重要でWindows標準のメモ帳ならばANSI、テキストエディタならばUTF-8(BOMなし)で保存する。

.htaccessの記述

.htaccessを一度ローカルにダウンロードして、設定内容を記述する。

AuthType Basic
AuthName "[認証名]"
AuthUserFile ".htpasswdファイルの場所"
require valid-user

それぞれの記述内容の意味は以下のとおり。

  • AuthType Basic
    • 認証方式の設定
    • 認証方式はBasicとDigestがあり、ベーシック認証ではBasicと記述する
  • AuthName ” [認証名] “
    • この認証の名前を任意で設定する
    • 好きな名称で良いが、半角英数字が良い。
    • 必ずダブルクォーテーション""で囲むこと
  • AuthUserFile ”[.htpasswdファイルの場所]”
    • .htpasswdの設置場所
    • サーバー内のフルパスをスラッシュ/始まりで記述
    • 必ずダブルクォーテーション""で囲むこと
  • require valid-user
    • 全ユーザーに認証を求めるようにするという意味

3行目のサーバのフルパスを確認する方法は、テキストエディタで任意のphpファイル(fullpass.phpなど)を作成し、下記のように記述します。

echo __FILE__;

次に、フルパスを知りたいディレクトリにアップロードして、ブラウザでhttps://XXXXXX/test/fullpass.phpにアクセスして確認できる。確認後、fullpass.phpは削除して良い。

  • ルートディレクトリ
    • test
      • index.html
      • fullpass.php //ここにアップロード

.htaccessをアップロード

完成した.htaccessをBasic認証をかけたいディレクトリにアップロードする。

  • ルートディレクトリ
    • test
      • index.html
      • .htaccess //ここにアップロード

.htpasswdを作成

.htaccessの3行目で記述したパスのディレクトリへ移動し、.htpasswdを新規作成する。

.htpasswdをローカルにダウンロードして、ログイン時に入力するユーザー名パスワードを記述する。

[ユーザー名1]: [暗号化されたパスワード1]
[ユーザー名2]: [暗号化されたパスワード2]

入力時のルール

  • ユーザー名と暗号化されたパスワードを、半角コロン(:)記号で区切って記述する
  • 1行に1組ずつ、アカウントを作成したい数だけ改行する
  • 暗号化がされていないバスワードを記述してもベーシック認証は動作しない仕組みになっている

パスワードの暗号化

今回は、LUFTTOOLSのパスワード暗号化ツールを使用する。IDをtestuser、パスワードをninsyoutestと入力し、生成ボタンをクリックする。

すると、.htpasswdに記述するテキストが暗号化されたパスワードとともに生成される。そのまま.htpasswdに転記する。

testuser:W5VZAMcxgh5.E

.htpasswdをアップロード

完成した.htpasswdを、.htaccessで指定した場所に保存して完了。

アクセス制限を確認する

https://XXXXXX/test/index.htmlへブラウザからアクセスすると、認証ダイアログが立ち上がる。

ここで.htpasswdに記述したユーザー名パスワードを入力する。ただし、パスワードは暗号化する前のパスワードを入力しなければ、認証を通ることができない。

ユーザー名testuser
パスワードninsyoutest