Secure 플래그가 없는 민감한 쿠키 설정

Secure 플래그가 없는 민감한 쿠키

설명

인증 토큰, 세션 식별자, API 키 같은 민감 값을 담은 쿠키에 Secure 플래그가 없으면 HTTPS가 아닌 연결에서도 쿠키가 전송될 수 있습니다. 네트워크 공격자는 평문 HTTP 요청이나 다운그레이드된 경로에서 쿠키를 탈취해 세션 하이재킹과 인증 우회를 시도할 수 있습니다.

잠재적 영향

  • 중간자 공격자가 평문 HTTP 요청에서 세션 쿠키나 토큰을 탈취할 수 있습니다.
  • 탈취된 쿠키로 사용자 세션을 가장하거나 권한 있는 API에 접근할 수 있습니다.
  • HTTPS를 사용하는 사이트라도 일부 HTTP 경로나 리다이렉트에서 쿠키가 노출될 수 있습니다.

해결 방법

  • 민감한 서버 쿠키에는 secure: true를 설정하세요.
  • HttpOnly와 SameSite도 함께 적용해 스크립트 접근과 CSRF 위험을 줄이세요.
  • Set-Cookie 헤더를 직접 구성할 때는 Secure 속성을 포함하고 HTTPS 전송만 허용하세요.

예시

변경 전

javascript
app.post("/login", (req, res) => {
  const token = createSession(req.user);
  res.cookie("session", token, { httpOnly: true });
  res.send("ok");
});

변경 후

javascript
app.post("/login", (req, res) => {
  const token = createSession(req.user);
  res.cookie("session", token, {
    secure: true,
    httpOnly: true,
    sameSite: "Lax",
  });
  res.send("ok");
});

설명:

  • 변경 전: 민감한 세션 쿠키에 Secure가 없어 HTTP 연결에서 전송될 수 있습니다.
  • 변경 후: Secure, HttpOnly, SameSite를 함께 설정해 전송과 접근 범위를 제한합니다.

참조