설명
인증 토큰, 세션 식별자, 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를 함께 설정해 전송과 접근 범위를 제한합니다.