'Secure' 속성이 없는 민감한 쿠키

Sensitive Cookie in HTTPS Session Without 'Secure' Attribute

설명

'Secure' 속성이 없는 민감한 쿠키는 중간자 공격(Man-in-the-Middle, MITM)으로 인해 민감한 정보가 노출될 위험이 있습니다. 'Secure' 속성이 없는 쿠키는 HTTPS가 아닌 HTTP에서도 전송될 수 있으므로 보안에 취약합니다.

잠재적 영향

  • 민감한 정보 유출: 공격자가 쿠키를 가로채서 세션을 탈취하거나 민감한 정보를 얻을 수 있습니다.
  • 세션 하이재킹: 공격자가 세션 쿠키를 가로채서 사용자로 가장할 수 있습니다.
  • 데이터 변조: 공격자가 쿠키 데이터를 조작하여 애플리케이션의 무결성을 해칠 수 있습니다.

해결 방법

  • 쿠키에 'Secure' 속성 추가: HTTPS를 통해서만 쿠키가 전송되도록 'Secure' 속성을 설정합니다.

예시

변경 전

python
# Unsafe Django cookie settings
SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

변경 후

python
# Safe Django cookie settings
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

변경 전

python
# Unsafe Flask cookie settings
from flask import Flask

app = Flask(__name__)
app.config.update(
    SESSION_COOKIE_SECURE=False,
)

변경 후

python
# Safe Flask cookie settings
from flask import Flask

app = Flask(__name__)
app.config.update(
    SESSION_COOKIE_SECURE=True,
)

변경 전

python
# Unsafe FastAPI cookie settings
from fastapi import FastAPI, Response
import secrets

app = FastAPI()

@app.post("/set-cookie")
async def set_cookie(response: Response):
    session_id = secrets.token_urlsafe(32)  # 서버가 발급한 예측 불가능한 세션 값
    response.set_cookie(
        key="session",
        value=session_id,
        secure=False,
        httponly=True,
        samesite="lax",
    )
    return {"message": "Cookie set"}

변경 후

python
# Safe FastAPI cookie settings
from fastapi import FastAPI, Response
import secrets

app = FastAPI()

@app.post("/set-cookie")
async def set_cookie(response: Response):
    session_id = secrets.token_urlsafe(32)  # 서버가 발급한 예측 불가능한 세션 값
    response.set_cookie(
        key="session",
        value=session_id,
        secure=True,
        httponly=True,
        samesite="lax",
    )
    return {"message": "Cookie set"}

설명

  • 변경 전: 'Secure' 속성이 설정되지 않아 쿠키가 HTTP를 통해 전송될 수 있습니다.
  • 변경 후: 'Secure'는 쿠키를 HTTPS로만 전송하게 합니다. 'HttpOnly'는 별도로 JavaScript의 쿠키 읽기를 제한합니다.

참조