상위: Web Security
요약
공격자가 **미리 알고 있는 세션 ID를 피해자가 사용하도록 고정(fixate)**시킨 뒤, 피해자가 그 세션으로 로그인하면 공격자도 동일 세션으로 인증된 접근을 얻는 공격. Session Hijacking이 "탈취"라면 이건 "주입"이다.
공격 흐름
- 공격자가 세션 생성:
session_id=attacker123 - 피해자에게 그 세션 ID가 담긴 링크로 로그인하도록 유도
- 피해자 로그인 후, 서버가 같은 세션 ID를 유지하면 → 공격자도
attacker123으로 접근 가능
방어
핵심은 로그인 성공 시 세션 ID를 반드시 재생성하는 것. 로그인 전후의 세션 ID가 달라지므로 미리 심어둔 ID는 무력화된다.
@app.route('/login', methods=['POST'])
def login():
if authenticate(username, password):
session.clear() # 기존 세션 무효화
session['user_id'] = user.id
session.regenerate() # 세션 ID 재생성 (fixation 방어의 핵심)
관련 노트
- Session — 세션 인증 전반
- Session Hijacking