Secure, HttpOnly, SameSite 쿠키 플래그
세션 쿠키는 주요 표적입니다. 세 가지 속성 — Secure, HttpOnly, SameSite — 이 공격자가 이를 훔치거나 오용할 수 있는지 결정합니다. 플래그가 없으면 곧바로 세션 탈취와 CSRF로 이어집니다.
무엇인가요
Secure는 쿠키를 HTTPS로만 보냅니다. HttpOnly는 JavaScript(document.cookie)로부터 숨깁니다. SameSite는 교차 사이트 요청에서 전송될지를 제어합니다.
이들이 함께 공격 표면을 줄입니다: 공격자는 주입한 스크립트로 쿠키를 읽을 수 없고, HTTP로 스니핑할 수 없으며, 다른 사이트에서 편승할 수 없습니다.
왜 중요한가요
HttpOnly가 없으면 어떤 XSS 버그든 세션 쿠키를 읽어 공격자에게 로그인된 세션을 넘겨줍니다. Secure가 없으면 쿠키가 일반 HTTP 요청에서 유출됩니다.
SameSite가 없으면 브라우저가 교차 사이트 요청에 쿠키를 첨부하는데, 이것이 바로 CSRF 공격이 의존하는 메커니즘입니다.
고치는 방법
대부분의 프레임워크는 쿠키를 설정할 때 이들을 옵션으로 제공합니다.
res.cookie("session", token, {
secure: true,
httpOnly: true,
sameSite: "lax", // or "strict" for maximum protection
path: "/",
});쿠키 이름을 __Host-로 지으면 브라우저가 Secure, Path=/, Domain 없음을 요구하도록 강제합니다 — 세션 쿠키를 위한 강력하고 자체 적용되는 기본값입니다.
정말 교차 사이트 쿠키가 필요하다면, SameSite=None은 Secure도 설정된 경우에만 적용됩니다. 그렇지 않으면 최신 브라우저가 쿠키를 버립니다.
자주 묻는 질문
SameSite는 Lax인가요 Strict인가요?
Lax는 최상위 탐색을 여전히 허용하는 안전한 기본값입니다. Strict는 더 엄격하지만, 사용자가 외부 링크로 도착하면서 로그인 상태를 기대하는 흐름을 깨뜨릴 수 있습니다.
이 플래그들이 XSS를 막나요?
HttpOnly는 쿠키를 숨겨 XSS의 피해를 제한하지만, XSS 자체를 막지는 않습니다. 강력한 Content-Security-Policy와 함께 사용하세요.