サンプル・プログラムの実行例
サンプル・プログラム
mkhtpsw.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
準備
40: //表示幅(ピクセル)
41: define('WIDTH', 600);
42:
43: //Spinner - jQuery UI を使用するかどうか
44: define('USESPINNER', TRUE);
45:
46: //ユーザー名の初期値
47: define('DEF_NAME', 'user');
48:
49: //ユーザー名の最小長
50: define('LEN_MIN_NAME', 4);
51:
52: //ユーザー名の最大長
53: define('LEN_MAX_NAME', 20);
54:
55: //パスワード長の直値
56: define('LEN_DEF_PSW', 8);
57:
58: //パスワードの最小桁数
59: define('LEN_MIN_PSW', 6);
60:
61: //パスワードの最大桁数
62: define('LEN_MAX_PSW', 20);
jQuery UIの Spinner の使い方については、「解説:Spinner - PHPで素数かどうか判定」をご覧いただきたい。
JavaScriptを使ったクリップボードへのコピーについては、「JavaScriptでクリップボードを使う」をご覧いただきたい。
64: //パスワードに使用する文字セット定義
65: $PSWclasses = array(
66: //オブジェクト名 => ラベル, 文字セット, チェックボックス
67: 'num' => array('数字', '0123456789', TRUE),
68: 'upper' => array('英大文字', 'ABCDEFGHIJKLMNOPQRSTUVZXYZ', FALSE),
69: 'lower' => array('英小文字', 'abcdefghijklmnopqrstuvzxyz', TRUE),
70: 'symbol' => array('記号', '()%$#+-*', FALSE),
71: );
解説:パスワードの生成
225: /**
226: * パスワードを生成する
227: * @param int $len パスワードの長さ
228: * @param string $str パスワードに使う文字の並び
229: * @return string パスワード
230: */
231: function make_password($len, $str) {
232: $l = strlen($str) - 1;
233:
234: $psw = '';
235: for ($i = 0; $i < $len; $i++) {
236: $n = (int)mt_rand(0, $l);
237: $psw = $psw . substr($str, $n, 1); //1文字追加
238: }
239:
240: return $psw;
241: }
解説:パスワードと暗号化パスワード
394: //パスワード作成
395: if ($errmsg == '') {
396: $ss = '';
397: foreach ($PSWclasses as $key=>$val) {
398: if ($val[2]) {
399: $ss .= $val[1];
400: }
401: }
402: $psw = make_password($len, $ss);
403: //暗号化パスワード作成
404: $salt = make_password(2, 'abcdefghijklmnopqrstuvwxyz'); //標準DES
405: $crypt = $name . ':' . crypt($psw, $salt);
406: }
BASIC認証用の暗号化パスワードは crypt で作成できるのだが、暗号化アルゴリズムを基本的なDES暗号にする必要がある。これは第2引数の $salt を2桁にすることで指定できる。
参考サイト
- .htaccess の使い方や書き方・設置方法:Web Design Leaves
- セキュアプログラミング講座-Webアプリケーション編(IPA)
そこで今回は、 crypt 関数を使ってBasic認証用の暗号化パスワードをつくるプログラムを紹介する。
(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年5月18日)大幅改訂,pahooInputData.php分離,PHP8対応