tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

basic認証について

今回もセキュリティの話。

わざわざブログに書かなくても調べればすぐ出るような内容の話ではありますが・・・

 

basic認証はbasicと書かれている意味の通り、基本、簡易な認証システムのことです。

どの解説サイトを見ても「最も基本的な認証」とか「基本認証」と言う風に書かれていると思います。

また、HTTPで定義されていたり、Base64という英文字52文字と0~9,+,/の64種類の文字を使ったエンコードを使用していて、割と簡単に盗聴改竄が出来るみたいです。

 

とは言っても盗聴改竄は目的や道具がないとやらないことですし、何より大抵のブラウザでbasic認証が対応していることもあり、無いよりマシって感じで使えそうです。

 

 

さて、basic認証を実装していきます。

basic認証にはbasic認証機能をつける.htaccessというファイルとID、パスワードを管理するファイルの2つを準備します。

パスワードを管理するファイルについては.htaccessでファイルの場所を指定して、中のテキストを読み取るだけらしいので名前は何でもいいらしいです。

ここでは.htpasswdってファイル名で作ります。

 

まず.htaccessについて。

自分が利用しているfuelPHPではpublicフォルダの中に入っていました。

以下の4行を.htaccessの最下部に追加します。

 

AuthType     Basic
AuthName     "今から入るサイトの説明"
AuthUserFile .htpasswdまでのフルパス
require valid-user

 

青文字部分が自分で入力するところです。

今から入るサイトの説明・・・と言うよりはタイトルと言うべきでしょうか。

日本語を使うと文字コードの関係で化ける可能性があるので英文字のみがいいらしいです。

.htpasswdまでのフルパスは/で始まるサーバ上のフルパスになります。

なので.htpasswdはサーバのどこにでも配置してOKです。

ですが、IDとパスワードが入ったファイルなんて見られていいはずが無いのでweb公開してるフォルダとは別にした方がいいかもしれないです。

.htaccessの設定はこれで終了です。

 

次に.htpasswdの編集に移ります。

ここにはIDとパスワードを記述します。記述例として

 

test:I3ociC.B6IVN.

 

こんな感じ。IDとパスワードで:を挟む分かりやすい記述です。

さて、このパスワードですが当然のように暗号化されています。

先日ハッシュ化で文字列の暗号化について触れたので暗号化に何のアルゴリズムを使ったのか設定とか必要かと思ったのですが、このパスワード自体に暗号化に何を使ったかが既に書かれているそうなのでその必要は無いです。

 

パスワードの作り方ですがこれについてはサービスがいくつか存在しているので利用しましょう。

自分はこのサイトが使いやすかったです。

IDとパスワードの元になる文字列を入力すると直接.htpasswdに貼り付けられる形にしてくれます。

入力するパスワードに迷ったらランダムネーミングのサービスを使うといいかと思います。

 

IDとパスワードを.htpasswdに張り付けて保存して終了。

.htaccessの記述ミスがなければこの時点でbasic認証が使えるようになっています。

 

機能実装自体はここで終わりですが、.htaccessのファイル位置はどうしてもwebコンテンツに関わる部分に配置されているので少なからずその中身を見られる可能性があります。

そこで保険として.htaccessの最終行に以下の3行を追加。

 

<Files ~ "^\.ht">
   deny from all
</Files>

 

「.ht」で始まるファイルへのアクセスは全てのアクセス元に対してアクセスを拒否するという処理です。

パスワードのファイルを.htpasswdにしてあるならこちらもその対象になります。

自分は公開フォルダ以外の部分に置いてあるので効果は無いと思いますが・・・.htaccessと同じ階層に置いた人には効果があるんじゃないかと思います。