HTTP Only 쿠키는 클라이언트(브라우저)에서 JavaScript를 통해 접근할 수 없도록 설정된 쿠키입니다. 이 쿠키는 서버와 클라이언트 간의 HTTP(S) 통신에서만 사용되며, 브라우저에서 실행되는 스크립트를 통해 노출되지 않기 때문에 XSS(Cross-Site Scripting) 공격으로부터 쿠키 탈취를 방지하는 데 효과적입니다.
쿠키를 생성할 때 HttpOnly
속성을 추가하면 됩니다.
JavaScript로 설정 불가
HttpOnly
쿠키는 클라이언트의 JavaScript에서 접근하거나 수정할 수 없습니다.예제
HTTP 응답 헤더에서 설정:
Set-Cookie: sessionId=abc123; HttpOnly; Secure
위 쿠키는 서버에서 생성되어 클라이언트에게 전달되며, 클라이언트의 JavaScript는 이 쿠키를 읽을 수 없습니다.
Spring Boot 예제:
@RestController
public class CookieController {
@GetMapping("/set-cookie")
public ResponseEntity<Void> setCookie(HttpServletResponse response) {
Cookie cookie = new Cookie("sessionId", "abc123");
cookie.setHttpOnly(true); // HttpOnly 속성 설정
cookie.setSecure(true); // HTTPS에서만 전송
cookie.setPath("/");
cookie.setMaxAge(3600); // 쿠키 유효기간 1시간
response.addCookie(cookie);
return ResponseEntity.ok().build();
}
}
구분 | 일반 쿠키 | HTTP Only 쿠키 |
---|---|---|
접근 방식 | JavaScript에서 document.cookie 로 읽기/수정 가능 | JavaScript에서 접근 불가 |
보안 | XSS 공격에 노출 가능 | XSS 공격으로부터 보호 가능 |
용도 | 클라이언트와 서버 간 데이터 교환, 프론트엔드 작업 | 서버-클라이언트 HTTP 통신에서만 사용 |
설정 방법 | Set-Cookie 응답 헤더 사용 | Set-Cookie 응답 헤더에 HttpOnly 추가 |
공유 범위 | JavaScript 및 HTTP 요청/응답 | HTTP 요청/응답에만 사용 |
보안 강화:
세션 관리:
JavaScript 조작 방지:
CSRF 공격 방지 불가:
암호화 필요:
HTTP Only 쿠키는 XSS 공격으로부터 보호하기 위해 설계된 중요한 보안 메커니즘입니다. 세션 관리나 민감한 정보 저장 시 기본적으로 사용해야 하며, Secure 플래그와 함께 설정하여 HTTPS에서만 사용되도록 추가적인 보안을 강화하는 것이 좋습니다.
추가 학습 자료