サンプル・プログラムの実行例
サンプル・プログラム
mkhtpsw.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
準備
0040: //表示幅(ピクセル)
0041: define('WIDTH', 600);
0042:
0043: //Spinner - jQuery UI を使用するかどうか
0044: define('USESPINNER', TRUE);
0045:
0046: //ユーザー名の初期値
0047: define('DEF_NAME', 'user');
0048:
0049: //ユーザー名の最小長
0050: define('LEN_MIN_NAME', 4);
0051:
0052: //ユーザー名の最大長
0053: define('LEN_MAX_NAME', 20);
0054:
0055: //パスワード長の直値
0056: define('LEN_DEF_PSW', 8);
0057:
0058: //パスワードの最小桁数
0059: define('LEN_MIN_PSW', 6);
0060:
0061: //パスワードの最大桁数
0062: define('LEN_MAX_PSW', 20);
jQuery UIの Spinner の使い方については、「解説:Spinner - PHPで素数かどうか判定」をご覧いただきたい。
JavaScriptを使ったクリップボードへのコピーについては、「JavaScriptでクリップボードを使う」をご覧いただきたい。
0064: //パスワードに使用する文字セット定義
0065: $PSWclasses = array(
0066: //オブジェクト名 => ラベル, 文字セット, チェックボックス
0067: 'num' => array('数字', '0123456789', TRUE),
0068: 'upper' => array('英大文字', 'ABCDEFGHIJKLMNOPQRSTUVZXYZ', FALSE),
0069: 'lower' => array('英小文字', 'abcdefghijklmnopqrstuvzxyz', TRUE),
0070: 'symbol' => array('記号', '()%$#+-*', FALSE),
0071: );
解説:パスワードの生成
0225: /**
0226: * パスワードを生成する
0227: * @param int $len パスワードの長さ
0228: * @param string $str パスワードに使う文字の並び
0229: * @return string パスワード
0230: */
0231: function make_password($len, $str) {
0232: $l = strlen($str) - 1;
0233:
0234: $psw = '';
0235: for ($i = 0; $i < $len; $i++) {
0236: $n = (int)mt_rand(0, $l);
0237: $psw = $psw . substr($str, $n, 1); //1文字追加
0238: }
0239:
0240: return $psw;
0241: }
解説:パスワードと暗号化パスワード
0394: //パスワード作成
0395: if ($errmsg == '') {
0396: $ss = '';
0397: foreach ($PSWclasses as $key=>$val) {
0398: if ($val[2]) {
0399: $ss .= $val[1];
0400: }
0401: }
0402: $psw = make_password($len, $ss);
0403: //暗号化パスワード作成
0404: $salt = make_password(2, 'abcdefghijklmnopqrstuvwxyz'); //標準DES
0405: $crypt = $name . ':' . crypt($psw, $salt);
0406: }
BASIC認証用の暗号化パスワードは crypt で作成できるのだが、暗号化アルゴリズムを基本的なDES暗号にする必要がある。これは第2引数の $salt を2桁にすることで指定できる。
参考サイト
- .htaccess の使い方や書き方・設置方法:Web Design Leaves
- セキュアプログラミング講座-Webアプリケーション編(IPA)
そこで今回は、 crypt 関数を使ってBasic認証用の暗号化パスワードをつくるプログラムを紹介する。
(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年5月18日)大幅改訂,pahooInputData.php分離,PHP8対応