# HTTP Only Cookie란?
웹 브라우저가 서버와의 통신에서만 사용하도록 설정된 쿠키로, 클라이언트 측의 스크립트(Javascript 등)에서는 접근할 수 없는 쿠키를 말합니다.
HTTP Only 속성이 설정된 쿠키는 서버가 설정한 경우에만 브라우저가 자동으로 서버로 전송하며, 클라이언트 측의 코드에서 읽거나 수정할 수 없는 쿠키입니다.
# HTTP Only Cookie를 사용해야 하는 이유와 단점
사용이유
- 보안 강화: XSS 공격으로부터 보호됩니다. JavaScript로 접근할 수 없기 때문에 민감한 정보가 안전하게 저장됩니다.
- 자동 처리: 브라우저가 자동으로 쿠키를 서버로 전송하므로, 개발자가 신경 쓸 부분이 줄어듭니다.
- 데이터 무결성: 클라이언트 측에서 쿠키를 수정할 수 없기 때문에 데이터의 무결성이 보장됩니다.
단점
- 디버깅의 불편함: 개발자 도구에서 쿠키의 내용을 직접 확인하기 어렵습니다.
- CORS 설정 필요: Cross-Origin Resource Sharing(CORS) 설정을 통해 서버 간 요청을 처리해야 할 수도 있습니다.
LocalStorage와 SessionStorage와의 비교 분석
특징 | 브라우저 Storage (LocalStorage/SessionStorage) | HTTP Only Cookie |
보안 | XSS 공격에 취약 | XSS 공격으로부터 보호 |
무결성 | 클라이언트 측에서 수정 가능 | 클라이언트 측에서 수정 불가 |
자동 전송 | 직접 설정 필요 | 브라우저가 자동으로 전송 |
디버깅 | 개발자 도구에서 쉽게 접근 가능 | 접근 어려움 |
사용성 | JavaScript로 쉽게 접근 가능 | 서버 간 설정 필요 |
# Http Only Cookie Java코드
@Component public class JwtUtil {
private static final long EXPIRATION_TIME = 86400000; // 1 day
public String generateToken(UserDetails userDetails) {
// JWT 토큰 생성 로직 String token = "generated-jwt-token"; // 실제 토큰 생성 로직을 여기에 구현
return token;
}
public void addTokenToCookie(String token, HttpServletResponse response) {
Cookie cookie = new Cookie("jwt-token", token);
cookie.setHttpOnly(true); // HTTP Only 속성 설정
cookie.setSecure(false); // HTTPS 환경에서는 true로 설정해야 함
cookie.setPath("/"); // 쿠키의 경로 설정, "/"로 설정하면 전체 애플리케이션에 적용됨
cookie.setMaxAge((int) (EXPIRATION_TIME / 1000)); // 쿠키 만료 시간 설정 (초 단위)
response.addCookie(cookie); // 응답에 쿠키 추가
}
}
# 확인
개발자도구 -> Application -> Cookie
'Java' 카테고리의 다른 글
[Bean, Proxy] 왜 @Cacheable이 동작하지 않을까? (0) | 2024.08.21 |
---|---|
[Redis] Redis란? (0) | 2024.08.16 |
[Spring Boot] Spring Boot란? (0) | 2024.08.05 |
[Spring] Spring이란? 정리가 잘 된 책장이다 (0) | 2024.08.02 |
[Spring Boot] Optional과 orElseThrow (0) | 2024.07.31 |