HTTP Only 쿠키

Kkd·2025년 1월 8일
0

매일메일 개념정리

목록 보기
61/93

HTTP Only 쿠키란?

HTTP Only 쿠키는 클라이언트(브라우저)에서 JavaScript를 통해 접근할 수 없도록 설정된 쿠키입니다. 이 쿠키는 서버와 클라이언트 간의 HTTP(S) 통신에서만 사용되며, 브라우저에서 실행되는 스크립트를 통해 노출되지 않기 때문에 XSS(Cross-Site Scripting) 공격으로부터 쿠키 탈취를 방지하는 데 효과적입니다.


HTTP Only 쿠키의 설정 방법

쿠키를 생성할 때 HttpOnly 속성을 추가하면 됩니다.

  1. JavaScript로 설정 불가

    • HttpOnly 쿠키는 클라이언트의 JavaScript에서 접근하거나 수정할 수 없습니다.
  2. 예제

    • 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 쿠키의 차이점

구분일반 쿠키HTTP Only 쿠키
접근 방식JavaScript에서 document.cookie로 읽기/수정 가능JavaScript에서 접근 불가
보안XSS 공격에 노출 가능XSS 공격으로부터 보호 가능
용도클라이언트와 서버 간 데이터 교환, 프론트엔드 작업서버-클라이언트 HTTP 통신에서만 사용
설정 방법Set-Cookie 응답 헤더 사용Set-Cookie 응답 헤더에 HttpOnly 추가
공유 범위JavaScript 및 HTTP 요청/응답HTTP 요청/응답에만 사용

HTTP Only 쿠키를 사용하는 이유

  1. 보안 강화:

    • XSS 공격으로 클라이언트 측 JavaScript에서 쿠키를 탈취하는 것을 방지.
  2. 세션 관리:

    • 로그인 세션 정보와 같은 민감한 데이터를 저장하기 적합.
  3. JavaScript 조작 방지:

    • 쿠키 값이 클라이언트에서 조작되지 않도록 방지.

HTTP Only 쿠키의 한계

  1. CSRF 공격 방지 불가:

    • HTTP Only 쿠키는 XSS 공격에는 효과적이지만 CSRF(Cross-Site Request Forgery) 공격을 방지하지 못합니다.
    • 이를 방지하려면 CSRF 토큰과 같은 추가 보안 메커니즘을 도입해야 합니다.
  2. 암호화 필요:

    • 쿠키 값이 평문으로 저장될 경우, 네트워크에서 탈취될 위험이 있으므로 Secure 플래그를 함께 사용하여 HTTPS 통신에서만 전송되도록 해야 합니다.

결론

HTTP Only 쿠키는 XSS 공격으로부터 보호하기 위해 설계된 중요한 보안 메커니즘입니다. 세션 관리나 민감한 정보 저장 시 기본적으로 사용해야 하며, Secure 플래그와 함께 설정하여 HTTPS에서만 사용되도록 추가적인 보안을 강화하는 것이 좋습니다.

추가 학습 자료

profile
🌱

0개의 댓글