코드스테이츠 - 3회차 백엔드 부트캠프/Main Project

2023.02.01 수 - 쿠키 보안 정책

곰돌이볼 2023. 2. 1. 17:43

📄 학습내용

쿠키 보안 정책

  • AWS의 EC2에 서버를 올려서 쿠키를 저장하려니 다음과 같은 경고가 나오고, 쿠키가 저장되지 않았다.
    • 'Secure' 속성은 있지만 보안 연결을 통해 수신되지 않았으므로 Set-Cookie 헤더를 통해 쿠키를 설정하려는 시도가 차단되었습니다.

 

  • 해결시도 1) 안됨
    • allowCredentials의 값을 true로 변경해서 쿠키 정책 허용
    • 쿠키를 생성할 때, 유효기간 설정하지 않기
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("https://seb41-main-022.vercel.app", "http://localhost:3000", "http://seb41-main-022.s3-website.ap-northeast-2.amazonaws.com")
                .allowedMethods("*")
                .allowCredentials(true) // 쿠키 정책 허용
                .maxAge(3000);

    }
}
    // 쿠키 생성 메서드
    public void createCookie(HttpServletResponse response, String cookieName, String cookieValue) {
        Cookie cookie = new Cookie(cookieName, cookieValue);
        cookie.setPath("/");
//        cookie.setMaxAge(60 * 500 * 60); // 500분간 저장 -> 제거
        cookie.setSecure(true);
        response.addCookie(cookie);
    }

 

    // 쿠키 생성 메서드
    public void createCookie(HttpServletResponse response, String cookieName, String cookieValue) {
//        Cookie cookie = new Cookie(cookieName, cookieValue);
//        cookie.setPath("/");
////        cookie.setMaxAge(60 * 500 * 60); // 500분간 저장
//        cookie.setSecure(true);
//        response.addCookie(cookie);
        response.setHeader("Set-Cookie", cookieName+"="+cookieValue+"; Secure; Path=/; SameSite=None");
    }

 

  • 해결시도 3)
    • 정상적으로 저장되는 JSESSIONID와 같은 형태로 만들어서 전송하기

  • 관련 코드
    • secure 관련 설정 삭제
    • httpOnly 설정 추가
    // 쿠키 생성 메서드
    public void createCookie(HttpServletResponse response, String cookieName, String cookieValue) {
        Cookie cookie = new Cookie(cookieName, cookieValue);
        cookie.setPath("/");
        cookie.setHttpOnly(true);
        response.addCookie(cookie);
    }