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>