簡易的なユーザ認証をする
※当サイトは、アフィリエイト広告を掲載し、収益を得て運営しています。
特定のファイル・ディレクトリのアクセスを拒否するでは、特定のファイル、ディレクトリに制限をかけることができました。しかし当然ですが、それでは自分でさえも該当のファイル、ディレクトリを見ることができなくなってしまいます。時には、自分や特定のユーザのみ、ファイルを閲覧したい場合もあるでしょう。
それを実現するには、ユーザ認証の仕組みを採ることが考えられます。ユーザ名とパスワードで認証して、妥当であればページを表示する、といった具合です。ただし、既存のページにサーバサイドプログラムで認証システムを導入するのは非常に大変!そんな時、簡易的な用途として便利なのが、ベーシック認証という仕組みです。
ベーシック認証は、セキュリティ的に緩いという弱点はあるのですが、手軽にユーザ認証を実現できます。認証画面は下記のような感じです。
このページでは、.htaccessを使ってベーシック認証を設定する方法をご紹介していきたいと思います。
セキュリティ上の問題や基本的なエラーを避けるため、.htaccessの前知識として当ディレクトリTOPページ内にある、.htaccessの基本も併せてお読みください。
.htaccessへの指定方法
ユーザ認証をする際の.htaccessの基本的な書式は以下です。
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user
[ .htpasswdのパス ]と書かれた部分には、後述する、ユーザ名とパスワードが記載された.htpasswdファイルのパスを記載します。なお、3行目のSecret Areaと記載された部分は、ユーザ認証ダイアログに表示させる名称ですが、これは他の文字列でもかまいません。
.htpasswdの指定方法
.htpasswdとは、ページの表示を許可するユーザ名およびパスワードが記載されたテキストファイルです。下記のような書式で記載します。全て半角英数字で指定してください。
なお、下記のように改行を入れることにより、複数のユーザを指定することもできます。
[ ユーザ名2 ]:[ 暗号化されたパスワード ]
実際の指定例を挙げますね。ユーザ名がbabamakoto。パスワードがtestの場合の指定例が下記です。
ご覧の通り、ユーザ名の部分は普通に半角英数字で指定すればいいのですが、パスワードは暗号化済みのものを使用しなければなりません。これに関してはUNIX、またはサーバサイドの知識がいるので、下記のツールを使って暗号化したパスワードを導きだしてください。
.htpasswdを配置する
.htpasswdファイルをテキストエディタで作成し、前述の通りにユーザ名とパスワードを指定したら、それをサーバの任意の箇所に配置します。極力、公開ディレクトリよりも上のディレクトリに配置しましょう。
このファイルパスを、先ほどお話しした.htaccessの書式内の[ .htpasswdのパス ]部分に記載します。これは、サーバ内の絶対パスで指定します。(相対パスでも可能ですが、httpd.confのServerRoot からの相対パスとして認識されてしまうようです)。下記に具体例を挙げます。
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user
これで完了です!
動作しないときは……
私もよくやるのですが、何らかの設定ミスでうまく動作しないことが結構あります。具体的には、認証画面は出るけれども、ユーザ名とパスワードを入れても認証されない、といった場合です。
そんな時に間違っていることが多いのは、.htpasswdのパス指定部分。ここの指定が間違っていることが多いですので、そのあたりを中心にチェックしてみてください。
セキュリティ
もし公開ディレクトリ以下に配置した場合は、.htpasswdのURLを直打ちしてみましょう。それでもし、.htpasswdの中身が表示されてしまった場合は、下記も今回の.htaccessの下の方に併記しておくといいでしょう。これで.htpasswdと.htaccessへのアクセスを拒否できます。
<Files ~ "^\.(htpasswd|htaccess)$">
Deny from all
</Files>
絶対的なセキュリティではない
最初にもお話ししましたが、ベーシック認証はセキュリティ的には緩い認証方式です。なぜなら、パスワードがそのままサーバに送信されるからです。パスワードはすでに暗号化されているとは言え、解析不能ではないのでセキュリティは高くありません。よりセキュリティの高い認証方式として、ダイジェスト認証というのもあるのですが、こちらはレンタルサーバーでは対応していないことも多いので、簡易的なベーシック認証が使われることが多いです。
12/06/30 facebookページ開設しました。RSS代わりにも使いたいと思います。
コメント
この記事へのコメントはまだありません。
↓もし参考になりましたら、シェアしていただけると嬉しいです(^-^)