설명
'Secure' 속성이 없는 민감한 쿠키는 중간자 공격(Man-in-the-Middle, MITM)으로 인해 민감한 정보가 노출될 위험이 있습니다. 'Secure' 속성이 없는 쿠키는 HTTPS가 아닌 HTTP에서도 전송될 수 있으므로 보안에 취약합니다.
잠재적 영향
- 민감한 정보 유출: 공격자가 쿠키를 가로채서 세션을 탈취하거나 민감한 정보를 얻을 수 있습니다.
- 세션 하이재킹: 공격자가 세션 쿠키를 가로채서 사용자로 가장할 수 있습니다.
- 데이터 변조: 공격자가 쿠키 데이터를 조작하여 애플리케이션의 무결성을 해칠 수 있습니다.
해결 방법
- 쿠키에 'Secure' 속성 추가: HTTPS를 통해서만 쿠키가 전송되도록 'Secure' 속성을 설정합니다.
예시
Django cookie settings
변경 전
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
Flask cookie settings
변경 전
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,
)
FastAPI cookie settings
변경 전
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의 쿠키 읽기를 제한합니다.