STERFIELD

【推測】basic認証の仕組みをPHPで実現してみた

【推測】basic認証の仕組みをPHPで実現してみた

まずは、apacheでのbasic認証のやり方を説明してみます。

.htpasswdの生成

htpasswdコマンドを打って、パス指定で.htpasswdファイルを作成できます。
「-c」は、createの意味で、.htpasswdファイルを新規作成します。
「-b」は、batchの意味で、コマンドラインで直接パスワードを指定します(ちょっと危ないですので、多用しないでほうがいいかもしりません)。

htpasswdコマンドが打てない方は、お手数ですが、ウェブサービスで「htpasswd 生成」で検索すれば、そういうツールが出てくるはずです。

.htaccessの設定

.htaccessに下記内容を追記。

もちろう、httpd.confの設定権限を持っている方は、そちらで設定したほうがいいです。

basic認証の仕組み

apacheが.htpasswdファイルを見て、ユーザが入力したパスワードが正しいかを確認します。
これは案外複雑のプロセスです。
htpasswdコマンドの説明(man)をみたら、暗号化にはシステムのcrypt関数だけではなく、md5やsha1も使えます。
かつ、crypt関数では、暗号化するため、saltをランダムで作成するから、パスワードの認証が非常にややこしくなっています。
こちらのテストでわかりましたが、crypt関数ではsaltの最初の二桁しか使わないらしい(passは前の8桁しかみてない)です。
それをベースに、認証の仕組みを推測してみて、PHPで書いてみました。

当たり前のことなんですが、自分で書いてみたらなんか膨大な感じをしますね。。

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい