쿠키(Cookie)
- 웹사이트가 사용자의 웹 브라우저에 저장하는 작은 데이터 파일로 사용자의 세션 정보를 유지하고 웹사이트 간의 상호작용을 추적하는 데 사용
- 사용자의 경험을 맞춤화하고 웹사이트의 기능을 개선하며 사용자 활동을 분석하는 데 중요한 역할을 함
특징
- 작은 데이터 파일 : 쿠키는 일반적으로 4KB 이하의 작은 데이터 파일로 텍스트 형식으로 저장
- 키 - 값 쌍 : 키 - 값 쌍의 형태로 저장
- 예를들어, username=JohnDoe와 같은 형태
- 도메인 범위 : 쿠키는 특정 도메인과 관련이 있으며 해당 도메인에서만 접근할 수 있음
- 만료 시간 : 쿠키는 만료 시간을 설정할 수 있음
HTTP 헤더를 통해 쿠키 정보를 주고 받음
유형
- 세션 쿠키(Session Cookies) : 브라우저가 열려 있는 동안에만 유지되는 쿠키
- 브라우저를 닫으면 세션 쿠키는 삭제됨
- 주로 로그인 상태 유지와 같은 임시 데이터를 저장하는 데 사용
- 영구 쿠키(Persistent Cookies) : 만료 시간이 설정된 쿠키로 해당 시간이 지날 때까지 브라우저에 남아 있음
- 사용자의 재방문 시 설정을 유지하거나, 로그인 정보를 기억하는 데 사용
- 보안 쿠키(Secure Cookies) : HTTPS 연결을 통해서만 전송되는 쿠키
- 네트워크를 통한 쿠키의 도난을 방지하기 위해 사용
❗️ Chorme v89 및 Firefox v75 이상 버전에서는 localhost 환경에서 Secure 속성을 무시하여 HTTP로도 쿠키를 주고받을 수 있게 함 (이는 개발 및 테스트를 쉽게 하기 위한 조치)
- 서드파티 쿠키(Third-Party Cookies) : 사용자가 방문한 웹사이트가 아닌 다른 도메인에서 설정한 쿠키
const http = require("http");
const hostname = "127.0.0.1";
const port = 3000;
const server = http.createServer((req, res) => {
res.setHeader("Content-Type", "text/plain; charset=utf-8");
res.setHeader("Set-Cookie", [
"leesfact = backend; httponly",
"tier = gold; Secure",
]);
res.end(
"과정에서 겪는 모든 어려움은 결국 당신의 목적을 이루기 위한 과정이다!\n"
);
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
http only 옵션 시, 자바스크립트로 파악할 수 없음(예: leesfact : backend)
쿠키의 시큐어 코딩(Secure Coding for Cookies)
- 쿠키 사용 시 보안 취약점을 방지하고 데이터의 안전성을 보장하기 위한 일련의 모범 사례를 의미
주요 지침
- Secure 속성 사용
- Secure 속성을 설정하여 쿠키가 HTTPS 연결을 통해서만 전송되도록 한다. 이를통해 네트워크를 통한 쿠키의 도난을 방지할 수 있음
Set-Cookie: sessionId=abc123; Secure; HttpOnly; Path=/; Expires=Wed, 21 Oct 2024 07:28:00 GMT
- HttpOnly 속성 사용
- HttpOnly 속성을 설정하여 자바스크립트에서 쿠키에 접근하지 못하도록 함
- 이를통해 XSS(교차 사이트 스크립트) 공격을 방지할 수 있음
Set-Cookie: sessionId=abc123; Secure; HttpOnly; Path=/; Expires=Wed, 21 Oct 2024 07:28:00 GMT
- SameSite 속성 사용
- CSRF(Cross-Site Request Forgery, 교차 사이트 요청 위조) 공격을 방지할 수 있음
- Strict 또는 Lax 값을 설정하여 쿠키가 동일 사이트 내에서만 전송되도록 함
Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Strict; Path=/; Expires=Wed, 21 Oct 2024 07:28:00 GMT
- 적절한 만료 시간 설정
- 쿠키의 유효 기간을 설정하여 필요 이상으로 오래 유지되지 않도록 한다.
Set-Cookie: sessionId=abc123; Secure; HttpOnly; Path=/; Expires=Wed, 21 Oct 2024 07:28:00 GMT
쿠키 허용 관련 알림창
-
서비스 운용 시, 쿠키를 사용한다면 쿠키 허용 관련 알림창을 만들어야 함
-
방문 기록을 추적할 때 쿠키가 사용되기 때문
-
이는 사용자의 데이터 간접 수집에 해당하며, KISA 지침을 준수해야 함