apacheで複数のディレクトリにそれぞれのIDにて基本認証をかけているサイトがあります。
今回は、そこで解った盲点というか、トラブルというか、傍から見たら、そりゃミスなんじゃねぇの?まぁ、そんな話です。
apacheで手っ取り早く、基本認証をかけるということになれば、大体、各ディレクトリ直下に「.htaccess」ファイルを置く事が一般的です。
僕の仕事では、割と頻繁に作っているので、「.htaccess」の雛形を持ち、ユーザIDを該当するIDを設定してディレクトリに置いています。
そんな感じで、ふと、運用しているときに起きました。
それぞれ別のIDを設定しているディレクトリを移動したときに、当然のようにIDとパスワードを入力します。
例えばディレクトリAからディレクトリBへ移動する。そんなところです。
運用にて、こういうディレクトリが多くなれば、それぞれIDを打ち直すのが面倒くさいので、大体多くの人はパスワードを記憶します。
で、そのディレクトリBからディレクトリAへ移動すると、確かパスワードを記憶させたはずなのに、ディレクトリBで認証したIDとパスワードが表示されてしまいました。
ブラウザの問題なのかな?とも思い、まぁ、その都度打ち直せばいいやと思っていたのですが、頻繁にディレクトリを移動してたら、やっぱり面倒くさくなる。
どうにかならないか?と思い調べたら、どうもブラウザの問題じゃなく、「.htaccess」の設定内容という所に落ち着く。
「.htaccess」の詳細な書き方は、きちんとしたサイトに譲るとするが、どうやら、AuthNameの設定に問題があるということがわかった。
AuthName "Please enter your ID and password"
みたいな事を入れると、基本認証のダイアログに
「Please enter your ID and password」
なんて出せるので、雛形にも定例文のように入れてた訳です。
どうも、それが良くなかったようで、
これは、アクセスしてきたユーザに対するメッセージが表示できるテキスト領域ではなかったのです。AuthNameはこのディレクトリに対する認証領域名として設定する名前で、キーのようなものだと。
そのため、ブラウザは、このAuthNameを見てIDとパスワードを記憶させるので、ディレクトリの移動の度に、前のAuthNameに関連付けていたIDとパスワードが表示されると言う事なのです。
じゃ、どうすれば良いか?
要するに、AuthNameがカブらなければ良いのだから、それぞれユニークになるようにすればいいのです。
だからといって、ディレクトリの名前とか入れてたら、IDとかパスワードのヒントを出してるようにも見えてしまう。
そこで、それぞれの「.htaccess」の設定で
AuthName "Please enter your ID and password"
を
AuthName "Please enter your ID and password [********]"
とし、********にランダムで8文字入れて解決しました。
ただ、個人的には…、
わざわざAuthNameにランダムで8文字入れなきゃならなくなったので、簡単にしてた仕事なのに、とんだ運用負担増だと。
何とか簡単にならんものかと、思案にふけってる訳です。
教訓:
AuthNameはユニークに。