gyumin.log

쿠키 Secure와 HttpOnly

서버가 쿠키를 내려줄 때 Set-Cookie 응답 헤더 안에 붙이는 보안 속성 두 개를 공부했다. 헤더 자체의 기술이라기보다 쿠키에 붙는 옵션이다.

Set-Cookie: sessionid=abc123; Secure; HttpOnly

Secure를 붙이면 그 쿠키는 HTTPS(암호화된 연결)로 통신할 때만 전송된다. 안 붙이면 브라우저는 HTTP 평문 연결에서도 쿠키를 실어 보내는데, 그러면 스니핑하는 공격자가 세션 쿠키를 그대로 주워서 그 사람인 척 로그인할 수 있다(세션 하이재킹). Secure는 “이 쿠키는 암호화된 길로만 다녀라”는 딱지.

시험에서는 거의 항상 짝꿍인 HttpOnly와 세트로 나온다. 이 둘의 구분이 핵심:

  • Secure = 전송 구간 보호. HTTPS에서만 쿠키 전송 → 스니핑(도청) 대비
  • HttpOnly = 스크립트 접근 차단. 자바스크립트(document.cookie)로 쿠키를 못 읽게 함 → XSS로 쿠키 탈취 대비

함정 패턴은 역시 바꿔치기:

  • “Secure 속성은 스크립트의 쿠키 접근을 차단한다” → 틀림, 그건 HttpOnly
  • “HttpOnly는 HTTPS에서만 전송되게 한다” → 틀림, 그건 Secure

**“무엇으로부터 지키는가”**로 기억하기 - Secure는 길에서 훔치는 놈(도청), HttpOnly는 집 안에 심어둔 스크립트(XSS)를 막는다.

연결 하나: TRACE 메소드의 XST 공격이 바로 HttpOnly를 우회해서 쿠키를 빼내려는 시도다 - 그래서 서버에서 TRACE를 꺼야 한다는 결론까지 한 줄로 이어진다. Set-Cookie가 오가는 요청·응답 구조는 노트 HTTP Request와 Response 참고.