Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

Apache Tomcat Cookie 관련 설정

제목

Apache Tomcat Cookie 관련 설정

1. SameSite

1.1. 개요

CSRF(Cross Site Request Forgery) 와 관련된 보안 설정이다.

1.2. 지원하는 버전

Apache Tomcat 9.0.28 혹은 8.5.48 이상만 지원한다.

1.3. 설정 방법

context.xml 의 <Context> 아래에 다음의 내용을 추가하면, 모든 Context 에 반영된다.

<CookieProcessor sameSiteCookies="strict" />

sameSiteCookies 속성은 다음과 같은 값을 가질 수 있다.

  • unset : 기본 값이다. 웹브라우저에 SameSite 값을 보내지 않는다. 웹브라우저가 알아서, 과거의 버전은 None 으로 비교적 최근 버전은 Lax 를 기본 값으로 처리할 것이다.
  • strict : 웹브라우저에 SameSite 값을 Strict 로 보낸다.
  • lax : 웹브라우저에 SameSite 값을 Lax 로 보낸다.
  • none : 웹브라우저에 SameSite 값을 None 로 보낸다.

<CookieProcessor>className 속성도 가질 수 있고(그 값은 아마도 다음 중 하나일 것이다), 생략된 경우 Apache Tomcat 의 버전에 따라 오래된 버전은 LegacyCookieProcessor 로, 비교적 최신의 버전이라면, Rfc6265CookieProcessor 로 처리된다.

  • org.apache.tomcat.util.http.Rfc6265CookieProcessor
  • org.apache.tomcat.util.http.LegacyCookieProcessor

partitioned 속성은 Tomcat 9.0.85 부터 지원한다(Apache Tomcat 9 Changelog 참조).

1.4. 문제해결

Apache Tomcat < 9.0.28 (혹은 < 8.5.48) 이라면 catalina.out (catalina.2024-10-25.log) 에서 다음과 같은 로그를 발견할 수 있다.

org.apache.tomcat.util.digester.SetPropertiesRule.begin Match [Context/CookieProcessor] failed to set property [sameSiteCookies] to [none]

partitioned 속성도 기술했다면 다음과 같은 로그도 발견할 수 있다. 9.0.28 <= Tomcat < 9.0.85 이라면 다음과 같은 로그만 발견된다.

org.apache.tomcat.util.digester.SetPropertiesRule.begin Match [Context/CookieProcessor] failed to set property [partitioned] to [true]

1.5. 관련된 주제 - AJAX 요청에 대해서

웹브라우저가 비교적 최근 버전이라면 SameSite 가 None 이라고 하더라도 AJAX 요청에서는 Cookie 를 보내지 않는다.

AJAX 요청에서는 Cookie 가 필요하지 않은 경우에도 Access-Control-Allow-Origin 헤더가 없다면, 이를 처리 할 수는 없다.

2. Secure, HttpOnly

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
제목

첨부파일