====== セキュリティが必要な機能には安全な乱数生成器を利用する ======
ランダム文字列/乱数に機密性が必要な場合、CSPRNG(暗号学的に安全な疑似乱数生成器)を利用する。UNIX系のOSの場合、/dev/urandomなどが利用できる。しかし、OSによっては異るパスや方法でCSPRNGにアクセスしなければならない。PHPはOSで利用可能なCSPRNGを利用する
* [[http://php.net/random_bytes|random_bytes()]] - ランダムなバイトデータを取得
* [[http://php.net/random_bytes|random_int()]] - ランラムな整数データを取得
を提供している。
セキュリティ(機密性)が必要なランダム値/乱数が必要な場合、上記の関数を利用しなければならない。
===== 非適合コード例 =====
function generate_new_password($len = 12) {
for ($pw = ''; $len; $len--) {
// 英数字+記号のパスワード
$pw .= chr(mt_rand(33, 126));
}
return $pw;
}
[[http://php.net/mt_rand|mt_rand()]]は暗号学的に安全な乱数生成器ではない。パスワードなど機密性が必要な情報の生成に利用してはならない。
===== 適合コード例 =====
function generate_new_password($len = 12) {
for ($pw = ''; $len; $len--) {
// 英数字+記号のパスワード
$pw .= chr(random_int(33, 126));
}
return $pw;
}
CSPRNGを利用したrandom_int()を利用しているので安全なパスワードが生成される。
===== 例外 =====
===== リスク評価 =====
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
^ Rule ^ Severity ^ Likelihood ^ Remediation Cost ^ Priority ^ Level ^
| IDS05-J | medium | unlikely | medium | P4 | L3 |
===== 関連ガイドライン =====
===== 参考文献 =====