予測可能なセッショントークン

予測可能なセッショントークン

説明

セッションや認証のトークンを連番、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のセッション管理も選択肢になります。

参考資料