Basic認証の場合、パスワードは crypt() 関数を使って簡単に生成できる。
書式: crypt(“暗号化する文字列”, “任意の2文字”);
単純にPHP ファイルに、以下のように記述して、ブラウザでプレビューできる。
echo crypt("mypassword", '1#');
また、以下のページを作成し、フォームの id (user name) と password に値を入力すると「id:password」という形式でパスワードを出力することができる。
<body> <h1>Password Generator</h1> <?php $id = ''; $pass = ''; $_POST = checkInput($_POST); if(isset($_POST['id'])) { $id = $_POST['id'];} if(isset($_POST['pass'])) { $pass = $_POST['pass'];} $pwd = crypt($pass, substr(crypt($id), -2)); function checkInput($var){ if(is_array($var)){ return array_map('checkInput', $var); }else{ if(get_magic_quotes_gpc()){ //php.iniでmagic_quotes_gpcが「on」の場合の対策 $var = stripslashes($var); } if(preg_match('/\0/', $var)){ //NULLバイト攻撃対策 die('不正な入力です。'); } if(!mb_check_encoding($var, 'UTF-8')){ //文字エンコードのチェック die('不正な入力です。'); } return $var; } } ?> <!--$_SERVER['PHP_SELF']も自分自身への送信になるが、$_SERVER['PHP_SELF']をaction属性値として直接<form>タグに記述するとXSS脆弱性となるので、絶対に避ける。「""」(空)にするか、以下のようにhtmlspecialchars()関数でエスケープする。--> <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>"> id (user name): <input type="text" name="id" value="<?php echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8'); ?>" size="50" /> <br /> password: <input type="text" name="pass" value="<?php echo htmlspecialchars($pass, ENT_QUOTES, 'UTF-8'); ?>" size="50" /><br /> <input type="submit" value=".htpasswdパスワード" /> </form> <p>ID(ユーザー名) と パスワード。「id:password」 <br /> <?php echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8') . ':' .htmlspecialchars($pwd, ENT_QUOTES, 'UTF-8'); ?></p> </body>