.htaccess活用法(1)

.htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、

1.アクセス制限(Basic認証)が可能。

Basic認証とは、ページアクセス時に左のようなダイアログ(左の画像は、Windows版IEのもの)が表示され、IDとパスワードを正しく入力しない限り、コンテンツにアクセスできないようにする仕組みです。これは、.htaccessによって実現されます。


 【広告】 amazon.co.jp「インターネット・WEB開発」ベストセラー

.htaccessというファイルを作成できない?!
5年ほど前になりますが、「.htaccess」を最初見たとき、変なファイルだなと思いました。拡張子のないファイルはそれまでにも何度か見たことがありましたが、これはファイル名のないファイル。最初、拡張子であることさえ気がつかず、ファイル名が「.htaccess」で、拡張子は無いのかと思っていました。(実話)

で、メモ帳で作成しようとすると、「.htaccess」で保存しようとすると勝手にWindowsが「.htaccess.txt」とリネームしてしまう現象に悩まされたことがあります。不思議なことに、今、試してみるとそのような現象はどうやっても起きないのですが、他の.htaccessの解説ページでいろいろ調べてみたところ、やはり私が数年前に悩まされていた現象はたしかに存在していたようです。

もし、あなたの環境でも同じような現象に悩まされているならば、以下の方法をお試しください。

  • 一旦、「.htaccess.txt」などと保存します。次に、エクスプローラでその.htaccessがあるフォルダーを開き、.htaccess.txtを選択します。さらに右クリックで「名前の変更」を選択し、「.htaccess」に変更します。エクスプローラでなくても、NextFTPのようなFTPソフトであれば、アプリケーション左側にローカルファイルが一覧表示されますし、それを利用してリネームするという手もあります。

  • もちくは、一旦、「.htaccess.txt」をそのままFTPソフトを利用してアップロードした後に、FTPソフトの機能を使ってサーバ側でリネームするという手もあります。前掲のNextFTPなら、ローカルファイルのリネームと全く同じ感覚で、ファイル選択の後、右クリックで簡単にリネームできます。なお、FTPでアップロードした.htaccessファイルが見えない現象については、こちらで解説していますので、参考にしてください。
.htaccessファイルには下記のように書きます。は改行を表します。

    AuthUserFile /home/hogehoge/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Please enter your ID and password"
    AuthType Basic
    require valid-user
1行目には、IDとパスワードの組が入ったテキストファイル(.htpasswd。ファイル名はこれでなくても構いませんが、慣用的にこのファイル名を使っています。)のフルパスを指定します。相対パスによる指定では駄目です。.htpasswdのファイルは、DocumentRootより上に設置した方が良いでしょう。また、パーミッションは604のようにしておきます(例:/home/hogehoge/public_html/がDocumentRootなら、/home/hogehoge/に設置します)。パーミッション「644」では、レンタルサーバ(共有サーバ)をご利用の際、適切な制限処理がサーバ管理者によってなされていない場合、telnet経由で同じサーバを利用する他のユーザー(借主)から大切なファイルを見られる可能性があります。.htaccessや.htpasswdのパーミッションについては、 も参照してください。

.htpasswdには、

john:joFWnPF2bJhPc
david:daS0keuySWUDg

のように改行区切りで、「ID:暗号化されたパスワード」と書かれています。暗号化(DES)されていますので、万が一、このファイルが流出してもパスワードを解読される危険性は低いです。(ゼロではありません。)

この暗号化されたパスワードの生成には、telnetを利用して行う方法もあるのですが、結構面倒です。また、telnetを開放していないレンタルサーバもあると思います。ここは、CGI(perl)やPHPで専用のプログラムを使う方法が簡単でしょう。例えば、PHPならcrypt関数で一発です。 をアップしました。ご自由にお使いください。

2行目の「AuthGroupFile /dev/null」は、グループごとにアクセスを許可する場合に用います。「/dev/null」ということはそのようなファイルは存在しないという意味になります。つまり、グループごとでのアクセス制限はしないという意味になります。

htaccessの中の3行目にある「AuthName "Please enter your ID and password"」によって、ダイアログに表示される文章を指定できます。日本語の指定も可能ですが、この場合、htaccessを保存する際に、文字コードに注意してください。私の利用しているサーバでは、Shift_JIS以外では文字化けしました。例えば、EUC-JPで保存すると、右の画像のように文字化けしました。元の文章は「IDとパスワードを入力してください」です。

EUC-JPの文章を無理やりShift_JISとして読み込んだ場合には、半角カタカナが大量出現することは、別稿の「ウェブマスターのための文字化け講座:Googleの検索結果サマリーが半角カタカナだらけ」でも説明しましたので、そちらを参照してください。

--広告--
【PR】 ヒアリングマラソンなど英語教材比較

【PR】 赤ちゃんが欲しい人に最適。妊娠しやすい排卵時期が分かる「レディディ」

【PR】 資格を取るための本を探すには・・・


ただし、「AuthName」に日本語を使うと、特定の環境(ブラウザなど)を使っているユーザーが、思わぬ問題に合うかもしれないので、日本語を使わないほうが無難かもしれません。

「AuthType」には「Basic」と「Digest」の2種類があります。後者の場合、よりセキュリティは高いのですが、対応していないブラウザもあり(例えばIE4.0やネットスケープ4.Xなど)、利用者が限られた環境のような場合を除き、利用には問題があります。また、ご利用になられているレンタルサーバによっては、必要なモジュールmod_autu_digestが組み込まれていないために利用できない場合もあるでしょう。



一方、「Basic」はほとんどのブラウザで対応していますが、ユーザーが入力したIDとパスワードは平文に近い形(一応分かりにくくするために、Base64方式でエンコードはされていますが暗号化ではありませんので復号=元に戻すことが可能です。)でネットワークに流れるため(HTTPヘッダーにBase64エンコードさえた値がしっかりと書かれています。)、例えば同じネットワーク(LAN)内にいる悪意のある人間からの盗聴の可能性もないわけではありません。

最後の行の「require valid-user」は、.htpasswdファイルに例えば、100対のIDと暗号化されたパスワードが書かれていた場合に、IDとパスワードの組がvalidであれば(正しければ)、どのユーザーでもアクセス可能にしますという意味です。対して、特定のユーザーだけにアクセスを許可したい場合は、「require user john」などとします。これにより、.htpasswdに100対のIDとパスワードが書かれていたとしても、実際にはjohnしか入室できないことになります。

許可したいユーザーが多数いる場合は、グループによる制御を考えます。ここで登場するのが、2行目の「AuthGroupFile」になります。ここで、例えば、「AuthGroupFile /home/hogehoge/.group」として、「.group」の中で、

manager:john edward david
sales:mary thomas arnold

などとしておき、「require valid-user」の代わりに「require group manager」とします。これにより、maryやthomasやarnoldは.htpasswdの中に自分のIDがあっても、入室できないようになります。managerであるjohnもしくはedawrdもしくはdavidのみが、しかも正しいパスワードを入力した場合にのみ入室できます。

このように.htaccessによるアクセス制限(Basic認証もしくはDigest認証)は非常に便利です。しかしながら、Basic認証については先述のようなセキュリティ的な問題もありますし、また、.htpasswdに書かれたIDとパスワードが増えれば増えるほど、サーバへの負荷が増大することが挙げられます。ユーザーがIDとパスワードを入力するのは1回でも、実際にはサーバはそのディレクトリー内のあらゆるファイルにアクセスする際に、妥当な接続要求かを、Authorizationヘッダーをデコードしたりして照合しています。

多数のIDとパスワードを管理する必要があるならば、データベースなどで管理し、通常のフォームにIDとパスワードを入力させ、(理想的には、SSLでデータ通信を保護した上で)、IDとパスワードの認証を行うことが必要になってくるでしょう。


   ※ディレクティブとは「命令」という意味です。

▼ AuthUserFile ディレクティブ
http://httpd.apache.org/docs-2.0/ja/mod/mod_auth.html#authuserfile

▼ AuthGroupFile ディレクティブ
http://httpd.apache.org/docs-2.0/ja/mod/mod_auth.html#authgroupfile

▼ AuthName ディレクティブ)
http://httpd.apache.org/docs/mod/core.html#authname

▼ AuthType ディレクティブ
http://httpd.apache.org/docs/mod/core.html#authtype

▼ Require ディレクティブ
http://httpd.apache.org/docs/mod/core.html#require



次章では、「特定のホスト(IPアドレス。プロバイダ)からのアクセスを制限する方法」について、まとめてみます。