상위: Web Security
요약
공격자가 유효한 세션 ID를 탈취해 피해자인 척 요청을 보내는 공격. 로그인 자격증명 없이도 세션만 훔치면 피해자 권한을 그대로 얻는다.
탈취 경로
- 네트워크 스니핑: 평문(HTTP) 통신에서 쿠키를 가로챔
- XSS:
document.cookie를 읽어 외부로 유출 (HttpOnly 미설정 시) - 세션 예측: 세션 ID가
user_1_timestamp처럼 예측 가능하면 추측 가능 - Session Fixation: 공격자가 심어둔 세션 ID를 피해자가 쓰게 유도 (별도 노트)
방어
- HTTPS 필수 — 도청 차단
- HttpOnly 쿠키 — JS 접근 차단으로 XSS 경유 탈취 방어
- 세션 ID 랜덤성 —
secrets.token_urlsafe(32)등 암호학적 난수 - IP / User-Agent 바인딩 — 세션 발급 시점과 다른 클라이언트면 무효화
@app.before_request
def validate_session():
if 'user_id' in session and session.get('ip') != request.remote_addr:
session.clear()
abort(401, "Session hijacking detected")
관련 노트
- Session — 세션 인증 전반
- Session Fixation · XSS · CSRF