프로젝트 진행 중 AOP를 이용해 로그인 세션 정보가 없으면 로그아웃 처리를 작업 중 SameSite 이슈를 발견하였다.
1. 증상
1) localhost에서 테스트할 때는 분명 정상적으로 로그아웃 처리가 되었다. 하지만 서버에 배포하면 로그인 후 메인화면까지는 정상적으로 접근되지만 다른 페이지에 접근 시 로그아웃 처리됐다.
로그인을 하면 URL에 jsessionid가 붙어야 로그인 세션이 유지가 되는 증상이 발견되었다.
ex) http://123.123.123.123/main.do;jsessionid=B26D954FE7B7B5B1628449D80973091D
2) 개발자툴 네트워크에서 헤더 정보를 보면 SameSite=None 우측에 경고 아이콘이 있고 마우스를 갖다 대면 '"SameSite=None" 속성은 있지만 "SameSite=None"을 사용하는 데 필요한 'Secure' 속성은 없으므로 Set-Cookie 헤더를 통해 쿠키를 설정하려는 시도가 차단되었습니다.'라는 내용이 나타났다.
2. 원인 분석
1) 개발자툴에서 쿠키에 담긴 값을 확인해 보니 JSESSIONID가 존재하지 않았다. 이것을 URL에서 제거하고 쿠키에 담아야 한다.
2) 크롬 80버전 이후부터 SameSite의 기본값을 None → Lax로 변경하였다. 이유는 CSRF(Cross site request forgery) 공격 때문이다.
※ SameSite 종류
- None : 동일 도메인과 다른 도메인 모두 쿠키 전송이 가능하다. 대신 CSRF의 공격에 취약하다. 그렇기 때문에 크롬 80 버전부터는 SameSite의 값을 None으로 사용하는 경우 Secure가 같이 들어가야 하고 Secure는 HTTPS(SSL)이 적용된 사이트이어야 한다.
- Strict : 동일 도메인에서만 쿠키 전송이 가능하다.
- Lax : 기본적으로 Strict와 동일하다. 하지만 CrossSite임에도 일부 요청 방식으로는 쿠키를 전송할 수 있다.
SameSite에 대해 공부해보고 None, Strict, Lax를 모두 적용해 보았지만 세션 문제는 해결되지 않았다.
3. 해결 방안
1) 진행중인 프로젝트는 내부에서만 사용하는 사이트이기 때문에 IP로만 접근하여 ssl적용이 필요하지 않은 사이트이다. 그렇기 때문에 SameSite의 Secure 옵션을 제거하기로 했다.
※ 톰캣 설정 변경
① tomcat > conf 경로에 web.xml이 존재할 것이다. vi 편집기로 해당 파일을 열어준다.
② <session-config>태그에 <secure> 태그 값이 true로 되어 있을 것이다. 이것을 false로 바꿔주면 된다.
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>false</secure>
</cookie-config>
</session-config>
이렇게 하면 SameSite 세션 이슈는 해결될 것이다.
tip) * 혹시 예상치 못한 오류가 발생해 jessionid값이 쿠키에 담기지 않는 경우 url에 노출되는 이슈가 발생하면 안 되기 때문에 '<tracking-mode>COOKIE</tracking-mode>' tracking-mode 태그를 추가하면 된다.
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>false</secure>
<tracking-mode>COOKIE</tracking-mode>
</cookie-config>
</session-config>
'Dev History > Error Log' 카테고리의 다른 글
npm install 에러 ] field 'browser' doesn't contain a valid alias configuration (0) | 2023.03.31 |
---|---|
npm run build 실행 에러 ] mozjpeg pre-build test failed (0) | 2023.03.31 |
Tomcat 실행 에러 ] Cannot allocate memory / Native memory allocation (0) | 2023.02.18 |
nohup : redirecting stderr to stdout (0) | 2022.10.04 |
웹 표준 ] Error: CSS: Parse Error (0) | 2022.04.01 |