簡易的なユーザ認証をする

.htaccessを利用した、ユーザ認証であるベーシック認証を設定する方法についてご紹介します。

独学!未経験からWebデザイナーになる!! > テクニカルノート > .htaccessの設定 > 簡易的なユーザ認証をする

簡易的なユーザ認証をする

特定のファイル・ディレクトリのアクセスを拒否するでは、特定のファイル、ディレクトリに制限をかけることができました。しかし当然ですが、それでは自分でさえも該当のファイル、ディレクトリを見ることができなくなってしまいます。時には、自分や特定のユーザのみ、ファイルを閲覧したい場合もあるでしょう。

それを実現するには、ユーザ認証の仕組みを採ることが考えられます。ユーザ名とパスワードで認証して、妥当であればページを表示する、といった具合です。ただし、既存のページにサーバサイドプログラムで認証システムを導入するのは非常に大変!そんな時、簡易的な用途として便利なのが、ベーシック認証という仕組みです。

ベーシック認証は、セキュリティ的に緩いという弱点はあるのですが、手軽にユーザ認証を実現できます。認証画面は下記のような感じです。

ベーシック認証

このページでは、.htaccessを使ってベーシック認証を設定する方法をご紹介していきたいと思います。

セキュリティ上の問題や基本的なエラーを避けるため、.htaccessの前知識として当ディレクトリTOPページ内にある、.htaccessの基本も併せてお読みください。

.htaccessへの指定方法

ユーザ認証をする際の.htaccessの基本的な書式は以下です。

AuthUserFile [ .htpasswdのパス ]
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic

require valid-user

[ .htpasswdのパス ]と書かれた部分には、後述する、ユーザ名とパスワードが記載された.htpasswdファイルのパスを記載します。なお、3行目のSecret Areaと記載された部分は、ユーザ認証ダイアログに表示させる名称ですが、これは他の文字列でもかまいません。

.htpasswdの指定方法

.htpasswdとは、ページの表示を許可するユーザ名およびパスワードが記載されたテキストファイルです。下記のような書式で記載します。全て半角英数字で指定してください。

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

なお、下記のように改行を入れることにより、複数のユーザを指定することもできます。

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

実際の指定例を挙げますね。ユーザ名がbabamakoto。パスワードがtestの場合の指定例が下記です。

babamakoto:lA2E9fagYMPuc

ご覧の通り、ユーザ名の部分は普通に半角英数字で指定すればいいのですが、パスワードは暗号化済みのものを使用しなければなりません。これに関してはUNIX、またはサーバサイドの知識がいるので、下記のツールを使って暗号化したパスワードを導きだしてください。

 
パスワード: <ここに暗号化されたパスワードが表示されます>

.htpasswdを配置する

.htpasswdファイルをテキストエディタで作成し、前述の通りにユーザ名とパスワードを指定したら、それをサーバの任意の箇所に配置します。極力、公開ディレクトリよりも上のディレクトリに配置しましょう。

このファイルパスを、先ほどお話しした.htaccessの書式内の[ .htpasswdのパス ]部分に記載します。これは、サーバ内の絶対パスで指定します。(相対パスでも可能ですが、httpd.confのServerRoot からの相対パスとして認識されてしまうようです)。下記に具体例を挙げます。

AuthUserFile /virtual/myaccount/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic

require valid-user

これで完了です!

動作しないときは……

私もよくやるのですが、何らかの設定ミスでうまく動作しないことが結構あります。具体的には、認証画面は出るけれども、ユーザ名とパスワードを入れても認証されない、といった場合です。

そんな時に間違っていることが多いのは、.htpasswdのパス指定部分。ここの指定が間違っていることが多いですので、そのあたりを中心にチェックしてみてください。

セキュリティ

もし公開ディレクトリ以下に配置した場合は、.htpasswdのURLを直打ちしてみましょう。それでもし、.htpasswdの中身が表示されてしまった場合は、下記も今回の.htaccessの下の方に併記しておくといいでしょう。これで.htpasswdと.htaccessへのアクセスを拒否できます。

# .htpasswdと.htaccessへのアクセスを拒否する
<Files ~ "^\.(htpasswd|htaccess)$">
Deny from all
</Files>

絶対的なセキュリティではない

最初にもお話ししましたが、ベーシック認証はセキュリティ的には緩い認証方式です。なぜなら、パスワードがそのままサーバに送信されるからです。パスワードはすでに暗号化されているとは言え、解析不能ではないのでセキュリティは高くありません。よりセキュリティの高い認証方式として、ダイジェスト認証というのもあるのですが、こちらはレンタルサーバーでは対応していないことも多いので、簡易的なベーシック認証が使われることが多いです。

↓もし参考になりましたら、シェアしていただけると嬉しいです(^-^)

12/06/30 facebookページ開設しました。RSS代わりにも使いたいと思います。

コメント

この記事へのコメントはまだありません。

テクニカルノート
環境環境のインストール
Apacheのインストール for Windows
XAMPPのインストール for Windows
MAMPのインストール for Mac
Perl(ActivePerl)のインストール for Windows
PHPのインストール for Windows
MySQLのインストール for Windows
PostgreSQLのインストール for Windows
テスト用Webサーバーの設定
外部からのアクセスを制限する
ドキュメントルートを変更する
バーチャルホストを設定する
.htaccessを有効にする
CGIを有効にする
.htaccessの設定
エラーページを指定する
特定のファイル・ディレクトリのアクセスを拒否する
└簡易的なユーザ認証をする