説明
セッションや認証のトークンを連番、uniqid、rand、mt_randなどで生成すると、攻撃者が値を予測できる可能性があります。
想定される影響
セッションの乗っ取り、認証の回避、アカウントのなりすましにつながるおそれがあります。
対処方法
random_bytes、またはPHPのセッション管理が提供する安全な乱数でトークンを生成してください。
例
HTTPS環境でCookieの値を生成する部分です。トークンと認証済みユーザーを結び付けるサーバー側の保存・検証、有効期限、失効処理は別途実装してください。
変更前
php
<?php
$_SESSION['last_session_id']++;
setcookie('session', $_SESSION['last_session_id']);
変更後
php
<?php
setcookie('session', bin2hex(random_bytes(32)), [
'httponly' => true,
'secure' => true,
'samesite' => 'Lax',
]);
説明:
- 変更前: 予測可能な値からセッションや認証のトークンを生成します。
- 変更後:
random_bytesでトークンを生成します。安全な乱数を使うPHPのセッション管理も選択肢になります。