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

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

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

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

はてなブックマークに登録  Yahoo!ブックマークに登録  この記事をクリップ!

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

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

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

ベーシック認証

このページでは、.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>

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

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

はてなブックマークに登録  Yahoo!ブックマークに登録  この記事をクリップ!
テクニカルノート
テスト用Webサーバーのインストール
Apacheのインストール for Windows
XAMPPのインストール for Windows
MAMPのインストール for Mac
テスト用Webサーバーの設定
外部からのアクセスを制限する
ドキュメントルートを変更する
バーチャルホストを設定する
.htaccessを有効にする
.htaccessの設定
エラーページを指定する
特定のファイル・ディレクトリのアクセスを拒否する
└簡易的なユーザ認証をする
 ホームページへ戻る

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