예측 가능한 세션 토큰

예측 가능한 세션 토큰

설명

세션 또는 인증 토큰을 증가값, uniqid, rand, mt_rand 등으로 만들면 공격자가 값을 예측할 수 있습니다.

잠재적 영향

세션 탈취, 인증 우회, 계정 가장이 가능합니다.

해결 방법

토큰은 random_bytes 또는 PHP 세션 관리의 안전한 난수를 사용해 생성합니다.

예시

아래는 HTTPS 환경의 쿠키 값 생성 부분입니다. 토큰을 인증된 사용자와 연결하는 서버 측 저장·검증, 만료 및 폐기 처리는 별도로 구현해야 합니다.

변경 전

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 세션 관리의 안전한 난수를 사용해 생성합니다.

참조