728x90
- SameSite는 최신 방식의 CSRF 공격 방어 방법 중 하나로서 서버가 쿠키를 설정할 때 SameSite 속성을 지정하여 크로스 사이트 간 쿠키 전송에 대한 제어를 핸들링 가능
→ 목적 : 쿠키 전송에 대한 제어 핸들링 - Spring Security는 세션 쿠키의 생성을 직접 제어하지 않기 때문에 SameSite 속성에 대한 지원을 제공하지 않지만 Spring Session은 SameSite 속성을 지원
Samesite 속성
- Strict
- 동일 사이트에서 오는 모든 요청에 쿠키가 포함되고 크로스 사이트간 HTTP 요청에 쿠키가 포함되지 않음

- Lax(기본 설정)
- 동일 사이트에서 오거나 Top Level Navigation에서 오는 요청 및 메소드가 읽기 전용인 경우 쿠키가 전송되고 그렇지 않으면 HTTP 요청에 쿠키가 포함되지 않음
- 사용자가 링크(<a>)를 클릭하거나 window.location.replace , 302 리다이렉트 등의 이동에는 쿠키가 포함
→ 단, <iframe>이나 <img>를 문서에 삽입, AJAX 통신 등은 쿠키가 전송되지 않음

- None
- 동일 사이트 및 크로스 사이트 요청의 경우에도 쿠키가 전송
→ 이 모드에서는 HTTPS 의한 Secure 쿠키로 설정되어야 함
- 동일 사이트 및 크로스 사이트 요청의 경우에도 쿠키가 전송

Samesite 예시

- CSRF는 CSRF Token이 반드시 첨부가 되어야 접속을 받아주게 되고, SameSite는 토큰이 아니라 쿠키 자체의 설정을 통해 쿠키를 서버에 전송 자체를 안 하여서 공격을 방어
- 대부분의 현대 브라우저는 SameSite 속성을 지원하지만, 여전히 사용 중인 오래된 브라우저는 지원하지 않을 수 있음
- SameSite는 CSRF 공격에 대한 유일한 방어 수단으로서가 아니라 심층적으로 강화된 방어의 일환으로 사용하는 것을 권장
Spring Session 으로 SameSite 적용하기
- implementation group: 'org.springframework.session', name: 'spring-session-core', version: '3.2.1’
@Configuration
@EnableSpringHttpSession
public class HttpSessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setUseSecureCookie(true);
serializer.setUseHttpOnlyCookie(true);
serializer.setSameSite("Lax");
return serializer;
}
@Bean
public SessionRepository<MapSession> sessionRepository() {
return new MapSessionRepository(new ConcurrentHashMap<>());
}
}
- 쿠키를 확인해보면 JSESSIONID가 아니라 SESSION이란 이름으로 생성

728x90
'Language > Spring Security' 카테고리의 다른 글
표현식 및 커스텀 권한 구현 (0) | 2024.07.31 |
---|---|
요청 기반 권한 부여 - HttpSecurity.authorizeHttpRequests() (0) | 2024.07.31 |
CSRF 통합 (0) | 2024.07.29 |
CSRF 토큰 유지 및 검증 (0) | 2024.07.29 |
CSRF (Cross Site Request Forgery, 사이트 간 요청 위조) (0) | 2024.07.29 |