V VibeCoding 365
사전 목록 security

VIBECODING 365 / DICTIONARY

쿠키

HTTP cookie

DEFINITION

쿠키(HTTP cookie)는 서버가 브라우저에 보내는 작은 데이터 조각이다. 브라우저는 이를 저장했다가, 이후 같은 서버로 가는 요청에 다시 실어 보낸다. HTTP 자체는 이전 요청이 누구였는지 기억하지 않으므로, 쿠키는 그 빈칸을 메우는 대표 수단이다. MDN은 주된 쓰임을 세션 관리(로그인과 장바구니), 개인화(언어와 테마), 추적(행동 기록) 세 가지로 정리한다.

요청마다 사람을 다시 알아보는 방식

로그인에 성공하면 서버는 응답의 Set-Cookie 헤더로 값을 심는다. 브라우저는 이후 그 도메인으로의 요청에 Cookie 헤더로 저장된 값을 붙인다. 서버는 그 값을 보고 같은 브라우저인지 판단한다. MDN이 그리는 기본 로그인 흐름도 자격 확인 뒤 세션을 쿠키로 잇는 식이다. 비밀번호나 개인정보를 쿠키 값에 그대로 넣지 않고, 서버만 아는 불투명한 세션 식별자를 두는 편이 안전하다. 쿠키는 이름만이 아니라 경로와 도메인으로 범위가 정해진다. 도메인을 넓게 주면 서브도메인 요청에도 따라가므로, 로그인 식별은 필요한 호스트와 경로에만 묶는 것이 맞다.

브라우저를 닫으면 사라지는 것과 날짜가 있는 것

만료 시각이나 수명 초를 주지 않으면 세션 쿠키가 된다. MDN은 세션이 클라이언트가 종료될 때 끝난다고 적는다. 다만 일부 브라우저는 세션을 복원해 더 오래 남길 수 있다. Expires는 절대 시각이고 그 기준은 서버가 아니라 쿠키를 받는 클라이언트 시계다. Max-Age는 초 단위이며 둘 다 있으면 Max-Age가 우선한다. 같은 이름과 경로로 수명을 0으로 다시 보내면 즉시 지울 수 있다.

누가 읽고 어디로 실려 가는지

Secure가 붙은 쿠키는 HTTPS 요청으로만 전송된다. HttpOnly는 페이지 스크립트가 문서의 쿠키 저장소에서 그 값을 읽지 못하게 막아, 스크립트 침입으로 세션이 훔쳐질 위험을 줄인다. 스크립트가 값을 못 읽을 뿐, fetch나 폼 전송처럼 브라우저가 보내는 요청에는 그대로 실려 간다. MDN의 실무 안내는 특정 호스트에만 필요한 세션 쿠키에 __Host- 접두를 쓰고, 경로는 루트만, 도메인 속성은 빼라고 한다. 그러면 그 쿠키는 심은 호스트로만 돌아가고 서브도메인으로 새어 나가지 않는다. SameSite는 다른 사이트에서 온 요청에 쿠키를 붙일지를 정한다. Strict는 같은 사이트 요청만, Lax는 링크를 따라 들어오는 이동 등에서 더 허용하고, None은 교차 사이트에도 보내되 반드시 Secure와 함께여야 한다. 속성을 생략하면 브라우저는 기본을 Lax로 취한다.

쿠키에 두면 매 요청에 따라붙는 데이터

예전에는 클라이언트 저장에도 쿠키를 썼다. MDN은 지금은 Web Storage와 IndexedDB 같은 저장 API를 권한다. 쿠키는 요청마다 서버로 따라가 성능에 부담이 되고, 쿠키 하나 크기와 도메인당 개수에도 한도가 있다. MDN은 쿠키당 크기를 보통 약 4KB로 적는다. HTML 표준은 같은 사이트 두 창에서 물건을 고를 때 쿠키가 창 사이로 섞일 수 있다고 보고, 창 단위 저장을 위해 sessionStorage를 두었다. 서버가 매 요청에 알아야 하는 식별만 쿠키에 두고, 테마나 초안, 큰 자료는 저장 API 쪽이 맞다. MDN이 추적을 쿠키의 세 용도 중 하나로 적는 이유도, 광고·분석 식별자를 로그인 세션과 같은 값에 넣으면 안 되기 때문이다.

스크립트가 세션을 읽게 되는 실수

바이브 코딩에서 에이전트가 만든 로그인 코드는 토큰을 스크립트가 읽는 저장소에 두는 경우가 있다. 그 값은 페이지에 침입한 스크립트에 그대로 열린다. 세션 식별자는 서버가 심고 HttpOnly와 Secure, SameSite를 붙인 쿠키가 MDN이 안내하는 쪽에 가깝다. 로그인 유지가 목적인 쿠키와 광고·분석용 추적 쿠키는 역할이 다르므로 한곳에 섞지 않는다. 제3자 쿠키는 지금 보고 있는 사이트가 아닌 다른 도메인이 심은 값이며, 사용자 추적이 이 경로로 이뤄져 왔다. SameSite와 브라우저의 제3자 쿠키 제한은 그 전송을 줄이려는 쪽에 가깝다. 로그인 쿠키와 추적 쿠키를 같은 이름으로 재사용하지 않는다.

ENGLISH

HTTP cookie

EXAMPLE

Set-Cookie: sessionId=…; Path=/; Secure; HttpOnly; SameSite=Lax