htaccessを使ったBASIC認証

htaccessを使ったBASIC認証の設定方法についてのメモです。

BASIC認証は、特定のWebページやファイルに簡単にアクセス制限をかけられる方法の一つです。名前の通り、最も基本的な認証方式。
BASIC認証がかけられたページにアクセスしようとするとユーザー名とパスワードの入力が求められ、許可しているユーザーに一致したら閲覧できるようになる、というものです。

BASIC認証自体はほとんどのサーバーで設定可能ですが、.htaccess はApatch用の設定ファイルです。そのためApatch以外のサーバーでは .htaccess ではなく別の方法でBASIC認証を設定する必要があります。

レンタルサーバーによって .htaccess を使用できない場合もあるようなので、使えるかどうか事前に確認しておきましょう。

設定自体は簡単にできるのですが、いろいろ深掘りしたら沼にハマりました(無知すぎて次々知らないことが出てくる…)。この記事では基本的なところをまとめていきます…

必要なファイルと設定内容

用意するファイルは .htaccess.htpasswd です。これらのファイルに設定設定を記述してサーバーにアップロードすればBASIC認証がかけられます。

.htaccessファイルの作成

AuthType Basic
AuthName "認証画面に表示されるメッセージ"
AuthUserFile "パスワードファイルまでのフルパス"
require valid-user

フルパスはサーバーで調べられます。

参考: 【簡単】サーバーのフルパス(絶対パス)の調べ方 | S.Design.Labo

【NOTE】

.htaccess が作成できない場合、htaccess.txt といった仮のファイル名にして、サーバーにアップロード後 .htaccess にファイル名を変更します。

htpasswd(ユーザー・パスワード)ファイルの作成

ユーザー名:暗号化されたパスワード

【NOTE】

.htpasswd は、このファイル名でなくても、ユーザIDやパスワードが決まった記述方法で記述されていればOK。慣習的にこのファイル名が使われています。

「暗号化されたパスワード」は、パスワード生成ツールで作成できます。
htaccess/BASIC認証 – CMAN

もしターミナルなど使えるなら、htpasswdコマンドで作成することもできます。

% htpasswd -c ./.htpasswd user

上記コマンドを実行すると、続けて New password: が出てきます。ここで設定したいパスワードを入力します。続け様に Re-type new password: と表示されるので、もう一度同じパスワードを入力します。

Adding password for user user という表示になったら、無事パスワードが生成されています。作成したファイルを確認してみてください。

作成したファイルをアップロード

.htaccess.htpasswd を作ったらサーバーにアップロードします。

アップロードしたらサイトにアクセスし、ユーザーIDとパスワードの入力画面が表示され、また入力したらアクセスできるかどうかも確認します。念のため間違ったIDとパスワードでアクセスできないことも確認しておきましょう。

【NOTE】

.htaccess を配置したディレクトリ配下全てが適用範囲となります。

一度認証されれば、ブラウザのキャッシュが残っている限り、アクセスし続けられます。

本当にBASIC認証で良いですか?

アクセス制限をかける理由はさまざまあると思います。

BASIC認証は簡易的な認証方法であるため、セキュリティレベルは高くなく、企業の機密情報が載っていたり、個人情報を取り扱うようなサイトに設定するには適していません。
公開前のテストサイトや、機密情報とかはないけれど特定のユーザーとのみ共有する個人的なサイトなど、セキュリティをそこまで必要としないときに使用しましょう。

Digest認証にするよりSSL化が大事そう

BASIC認証よりDigest認証の方がセキュリティが高いからDigest認証を使いましょう、という声もあれば、BASIC認証とSSL通信の組み合わせの方がセキュリティが高いと記されているところもあり、結局どっちなのか自分の結論は出ませんでした…

どちらにせよセキュリティを考えるなら「SSL通信」にした方が良いことは間違いないです。Apatchの公式ドキュメント では以下のように書かれていました。

AuthTypeディレクティブは、ユーザー認証に使用する認証方式を選択します。最も一般的な認証方式はBasicで、mod_auth_basicによって実装されています。ただし、Basic認証では、クライアントからサーバーへのパスワードが暗号化されずに送信されることに注意してください。したがって、mod_sslを併用しない限り、この認証方式は機密性の高いデータには使用しないでください。Apacheは、AuthType Digestという別の認証方式をサポートしています。この認証方式はmod_auth_digestによって実装されており、より安全な認証方式として設計されていました。しかし、現在はそうではありません。接続はmod_sslで暗号化する必要があります。
https://httpd.apache.org/docs/current/en/howto/auth.html(英語原文をGoogle翻訳)

カテゴリー : WEB全般

index