PHPセキュリティ対策:Basic認証ファイルをつくる

(1/1)
パスワードと crypt関数」ではパスワードの暗号化方式を、「ディレクトリやファイルのアクセス権限」では Basic認証の方法を紹介した。じつは、Basic認証で用いられるパスワードは、 crypt  関数を使って生成することができる。
そこで今回は、 crypt  関数を使って Basic認証用の暗号化パスワードをつくるプログラムを紹介する。

サンプル・プログラム

このプログラムは、ユーザー ID とパスワードの文字セットと長さを入力すると、自動的にパスワードと Basic認証用の暗号化パスワードを表示するものである。

プログラムを実行する

ダウンロード(PHP4/5共用)

サンプル・プログラムの解説:パスワードの生成

パスワードを生成するプログラム自体は、「PHP でパスワードを生成」と同じである。
パスワードにする文字セットは、グローバル変数 $TblString に定義しておく。このテーブルの構造は二次元配列で、下記のような構造である。
array(識別符号, (表示文字列, 文字セット))
配列の末尾要素は NULL
このテーブルは、記号を含めた文字列を発生するなど、ユーザーが自由に変更・追加・削除することができる。ただし、マルチバイト文字には対応していない。

0011: /**
0012:  * global $TblString[] パスワードの元となる文字セット
0013:  * 構造は array(識別符号, (表示文字列, 文字セット))
0014:  * 配列の末尾要素は NULL
0015: 
0016: */
0017: $TblString = array(
0018: 'num'=>       array('数字', '0123456789'),

サンプル・プログラムの解説:数値範囲を検査する

このプログラムでは、ユーザーにパスワードの長さを入力させるが、その長さが妥当な値であるかどうかをチェックする必要がある。これを行うのが、ユーザー関数 MyCheckNumScope である。
space

0023: /**
0024:  * 数値範囲を検査する
0025:  * @param double $num 検査する数値
0026:  * @param double $nmin 最小値
0027:  * @param double $nmax 最大値
0028:  * @return bool TRUE/FALSE
0029: */
0030: function MyCheckNumScope($num$nmin$nmax) {
0031:     return ($num < $nmin || $num > $nmax) ? FALSE : TRUE;
0032: }

サンプル・プログラムの解説:パスワードを生成する

前述のユーザー関数 make_password によってパスワード $pswd を生成する。
次に、関数  crypt  用の salt も make_password によって生成する。
そして、関数  crypt  によってパスワード $pswd を暗号化する。
space
ここで得られる文字列 $cpswd は、そのまま、.htpasswd として利用することができる。

0110:     $pswd = make_password($len$TblString[$type][1]);   //パスワード
0111:     $sand = make_password(2, 'abcdefghijklmnopqrstuvwxyz');
0112:     $cpswd = $id . '' . crypt($pswd$sand); //暗号化パスワード

参考書籍

  • 入門PHP セキュリティ」(クリス・シフレット/桑村潤/オライリー・ジャパン/オーム社/2006 年 05 月/1,890 円)
  • PHP辞典第2版」(西沢直木/翔泳社/2008 年 02 月/2,520 円)
  • PHP の薬箱」(佐久嶋ひろみ/九天社/2006 年 11 月/2,940 円)

参考サイト

(この項おわり)
header