지원하는 사용자 에이전트에서 이름이 __Host-로 시작하는 쿠키를 받으려면 HTTPS 응답의 Secure, Path=/가 있어야 하고 Domain 속성은 없어야 합니다. 이 조합은 쿠키를 발급한 host에 묶는 데 쓰입니다.
HttpOnly와 SameSite는 prefix의 필수 조건이 아닙니다. 전자는 스크립트 접근을 제한하고 후자는 전송 맥락을 다룹니다. 이름만 보고 쿠키 전체 보안이 보장된다고 결론 내리지 말고 속성을 따로 판독하세요.
접두사는 이름표가 아니라 속성 조합 검사입니다
쿠키 이름을 __Host-session으로 바꿨다고 자동으로 host 전용이 되는 것은 아닙니다. 브라우저가 이 prefix를 지원하는 경우, 발급 응답이 HTTPS여야 하고 Secure가 붙어야 하며 Path=/여야 합니다. Domain을 지정하면 거부됩니다. Domain을 생략한 쿠키는 기본적으로 설정한 host에 묶입니다. 예를 들어 login.example.test가 만든 host-only 쿠키는 app.example.test와 공유되지 않습니다.
가상 응답 네 줄을 직접 판정합니다
| 가상 Set-Cookie | 판정 | 이유 |
|---|---|---|
| __Host-sid=x; Secure; Path=/ | 조건 충족 | HTTPS 응답을 전제로 Secure, 루트 경로, Domain 생략 |
| __Host-sid=x; Secure; Path=/; Domain=example.test | 거부 조건 | __Host- 쿠키에 Domain 속성이 들어 있음 |
| __Host-sid=x; Path=/ | 거부 조건 | Secure가 빠짐 |
| __Host-sid=x; Secure; Path=/app | 거부 조건 | Path가 정확히 /가 아님 |
첫 행도 응답이 HTTPS가 아니거나 브라우저가 prefix 규칙을 지원하지 않는 환경이라면 같은 판단을 보장하지 않습니다. 예시의 x 값은 임의 문자열이며 인증 토큰으로 사용할 수 없습니다. 판정의 핵심은 값의 모양이 아니라 이름 prefix와 속성의 조합입니다.
HttpOnly·SameSite는 각각 다른 질문에 답합니다
HttpOnly는 JavaScript가 document.cookie로 쿠키를 읽지 못하게 하는 속성입니다. XSS 자체를 막거나 서버 요청을 차단하지는 않습니다. SameSite=Lax나 Strict는 교차 사이트 요청에서 쿠키를 보낼 맥락을 제한하는 데 쓰입니다. 이 속성들은 __Host-의 세 가지 수용 조건을 대신하지 않으며, 반대로 prefix도 이 보호를 대신하지 않습니다. 세션 쿠키 설계에서는 목적별로 조합을 검토합니다.
헤더를 읽을 때는 속성 하나씩 체크합니다
- 쿠키 이름이 정확히
__Host-로 시작하는지 확인합니다. - 발급 응답이 HTTPS이고
Secure가 있는지 봅니다. Path=/인지 확인합니다.Domain속성을 명시하지 않는 올바른 발급 형태를 사용합니다. 빈 Domain 등 비정상 입력의 브라우저 파싱 동작은 이 판독 예제의 범위에 포함하지 않습니다.HttpOnly,SameSite, 만료 시각은 prefix 조건과 별도로 기록합니다.- 테스트 브라우저·웹뷰의 지원 여부와 실제 응답 헤더를 확인합니다.
쿠키 한 줄로 세션 전체의 안전을 단정하지 않습니다
__Host-는 다른 host가 같은 이름의 Domain 쿠키를 심어 충돌시키는 위험을 줄이는 속성 경계입니다. 로그인 CSRF, 토큰 수명, 세션 고정, 서버 측 권한 확인까지 해결하지는 않습니다. 응답에 여러 Set-Cookie 헤더가 있다면 이름별로 읽고, 프록시나 프레임워크가 Domain을 덧붙이지 않는지도 별도로 봐야 합니다.
복습: 어떤 속성이 빠졌나요?
문제: HTTPS에서 __Host-auth=q; Secure; Path=/; HttpOnly; SameSite=Lax; Domain=shop.example.test를 보냈습니다. prefix 조건에 맞나요?
정답: 아닙니다. Domain 속성이 지정되어 있어 __Host- 조건에 맞지 않습니다. HttpOnly와 SameSite=Lax는 유용할 수 있지만 이 오류를 상쇄하지 않습니다. 수정된 가상 예시는 Domain을 제거하고 나머지 속성을 유지하는 형태입니다.
정답을 가리고 확인해 보세요
이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.
지원 브라우저에서 HTTPS 응답으로 __Host-id=v; Secure; Path=/; Domain=example.test를 받았습니다. 어떤 조건 때문에 거부 대상이며, HttpOnly는 필수인가요?
정답과 해설 확인
Domain 속성이 지정되어 __Host- 조건을 위반합니다. HttpOnly는 prefix의 필수 조건이 아닙니다.__Host-는 Secure, 정확한 Path=/, Domain 속성 부재를 요구합니다. HttpOnly는 스크립트 접근을 제한하는 별도 속성입니다.