전체 그래프
Authentication

Session Fixation

web-securityauthenticationsessionattack

상위: Web Security

요약

공격자가 **미리 알고 있는 세션 ID를 피해자가 사용하도록 고정(fixate)**시킨 뒤, 피해자가 그 세션으로 로그인하면 공격자도 동일 세션으로 인증된 접근을 얻는 공격. Session Hijacking이 "탈취"라면 이건 "주입"이다.

공격 흐름

  1. 공격자가 세션 생성: session_id=attacker123
  2. 피해자에게 그 세션 ID가 담긴 링크로 로그인하도록 유도
  3. 피해자 로그인 후, 서버가 같은 세션 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 방어의 핵심)

관련 노트