업무 중에 문의 전화를 받았다. IE에서는 잘 되나 다른 브라우저에서는 회사 모듈에서 에러가 계속 발생한다는 이슈였다. 소스도 보고 로그도 더 찍어보니 크롬 등 브라우저에서는 세션 값을 못 가져오고 있었다.
하지만 이것은 나의 일... 해결은 나의 몫!
열심히 구글링을 해보니 결제 모듈에서도 비슷한 문제가 나타난다는 글들이 있어 읽어보니 samesite 관련 문제라는 걸 알 수 있었다.
2020년에 크롬은 CSRF에 대한 보안 강화를 위해 samesite 정책 기본값을 none에서 lax로 변경한다고 발표한 후 Edge와 Firefox 브라우저에서도 쿠키 정책 변경을 예고했다.
이에 대한 자세한 내용은 아래 링크 참고
chrome에서 제공하는 samesite 기본값 변경에 대한 가이드
사이트의 도메인과 일치하는 쿠키를 First-party Cookie, 그렇지 않은 쿠키를 3rd-party cookie라고 한다. samesite 정책은 이 타사 쿠키에 대한 보안 문제를 해결하기 위해 만들어진 것이라 한다.
정책 종류는 None, Lax, Strict가 있다.
None : 3rd-party cookie 전송 가능
Lax : Http GET 메소드를 통해 사용자가 직접 주소를 입력하여 접속하는 경우에만 예외적으로 3rd-party cookie 전송을 허용
Strict : 항상 first-party cookie만 전송 가능
처리하는 방법은 filter로 설정하거나 tomcat을 사용하는 경우에는 tomcat 설정 변경만으로 가능하다.
이 포스팅에서는 tomcat 설정 변경 방법에 대해 다룰 것이다. 먼저 수정 전 확인해야 할 전제조건은 아래와 같다.
http를 사용하면 설정해야 하는 secure 속성이 무시된다고 한다.
따라서 사이트에 구축할 때 https를 사용하도록 해야 한다.
tomcat 8.5.42버전 이상이어야 함
{tomcat 설치 위치}/conf/server.xml 파일을 열어
context 태그 내 아래 태그를 추가한다
<CookieProcessor sameSiteCookies="none" />
{tomcat 설치 위치}/conf/web.xml 내
session-config 태그 내 아래 태그를 추가한다.
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
https://web.dev/samesite-cookies-explained/
https://ttallaemideul.github.io/20200223/tomcat-001
https://seob.dev/posts/브라우저-쿠키와-SameSite-속성/
https://jjam89.tistory.com/231