Spring-Security 30

SameSite 속성: 개념, 목적, Spring Security에서의 설정

SameSite 속성: 개념, 목적, Spring Security에서의 설정SameSite 쿠키 속성은 CSRF(Cross-Site Request Forgery) 공격을 완화하기 위해 도입된 중요한 보안 메커니즘입니다. 웹 브라우저가 특정 상황에서 교차 사이트(Cross-Site) 요청 시 쿠키를 전송할지 여부를 제어합니다.1. SameSite 속성이란 무엇이며, 왜 나왔는가?SameSite 속성은 HTTP 응답 헤더의 Set-Cookie 필드에 추가되는 속성으로, 웹 브라우저가 교차 사이트 요청 시 해당 쿠키를 서버로 전송할지 여부를 결정하도록 지시합니다. 이는 Same-Origin Policy의 보완적인 보안 조치로, 특히 CSRF 공격 방어에 효과적입니다.왜 나왔는가? (CSRF 공격 방어의 한계 ..

Spring-Security 2025.05.29

WT와 CSRF 토큰의 관계, React에서 fetch를 이용한 CSRF 토큰 처리

1. JWT (JSON Web Token)를 사용하면 CSRF 토큰이 거의 필요 없나? 세션 전략 설정을 stateless로 하는 것처럼 CSRF 기능도 꺼주는 게 좋나?결론부터 말하면, JWT를 사용하고 세션 기반 인증을 사용하지 않는 (stateless) 환경이라면 CSRF 토큰은 거의 필요 없으며, 일반적으로 CSRF 기능을 비활성화하는 것이 좋습니다.자세한 설명:CSRF 공격은 브라우저가 자동으로 요청에 세션 쿠키를 포함시켜 서버가 정상적인 사용자의 요청으로 오인하게 만드는 취약점을 이용합니다.세션 기반 인증: 사용자가 로그인하면 서버는 세션 ID를 생성하고 이 ID를 쿠키에 담아 브라우저에 전송합니다. 이후 브라우저는 모든 요청에 이 세션 쿠키를 자동으로 포함시켜 보냅니다. CSRF 공격은 바로..

Spring-Security 2025.05.29

CSRF 토큰 유지 방법, HttpOnly 설정, 처리 필터 및 CsrfTokenRequestHandler

1. CSRF 토큰 유지 방법 (서버 측)CSRF 토큰은 서버가 발급하고, 클라이언트에게 전달되어 다시 서버로 돌아올 때 유효성을 검증하는 방식입니다. 서버는 발급한 토큰을 클라이언트로부터 받은 토큰과 비교하기 위해 저장하고 있어야 합니다. 이 저장 방식은 주로 세션 또는 쿠키를 통해 이루어집니다.세션을 이용한 CSRF 토큰 유지 (HttpSessionCsrfTokenRepository):설명: Spring Security의 기본 CSRF 토큰 저장 방식입니다. 서버는 CSRF 토큰을 생성한 후, 사용자 세션(HttpSession)에 해당 토큰을 저장합니다. 클라이언트에게는 이 토큰 값을 HTML 폼의 숨겨진 필드나 HTTP 헤더를 통해 전달합니다. 클라이언트로부터 요청이 다시 들어오면, CsrfFilt..

Spring-Security 2025.05.29

CSRF (Cross-Site Request Forgery): 개념, 방어 메커니즘, Spring Security에서의 처리

1. CSRF (Cross-Site Request Forgery)란?CSRF는 사이트 간 요청 위조라는 의미로, 사용자가 로그인된 상태를 악용하여 사용자의 의지와 무관하게 공격자가 의도한 행위를 웹사이트에 요청하게 만드는 공격 기법입니다.공격 원리 (이미지 자료 기반 설명):이미지에서 설명된 CSRF 공격 흐름은 다음과 같습니다.공격자: 악성 웹사이트를 만들고, 사용자에게 전달할 악성 링크를 생성합니다.사용자: 공격자가 보낸 링크를 클릭하거나, 악성 웹사이트를 방문합니다.공격용 웹사이트: 사용자의 브라우저를 통해 공격 대상이 되는 웹사이트에 요청을 보냅니다. 이때, 사용자가 이미 공격 대상 웹사이트에 로그인되어 있다면, 브라우저는 해당 웹사이트의 세션 쿠키를 자동으로 요청에 포함시켜 보냅니다.공격 대상 ..

Spring-Security 2025.05.29

CORS (Cross-Origin Resource Sharing): 개념, 작동 방식, Spring Security에서의 처리

1. CORS란 무엇이며, 왜 나왔는가?**CORS (Cross-Origin Resource Sharing)**는 웹 페이지의 제한된 리소스가 다른 도메인으로부터 요청될 수 있도록 허용하는 메커니즘입니다. 즉, 웹 브라우저가 다른 출처(Origin)의 리소스에 접근할 수 있도록 허용하는 표준 방식입니다.왜 나왔는가? (Same-Origin Policy의 등장과 한계)웹 보안의 근간에는 Same-Origin Policy (동일 출원 정책)가 있습니다. 이 정책은 한 출처에서 로드된 웹 페이지가 다른 출처의 리소스와 상호작용하는 것을 제한하여 악성 웹사이트가 사용자의 데이터를 훔치거나 제어하는 것을 방지합니다.출처(Origin)의 정의: 프로토콜(protocol), 호스트(host), 포트(port) 세 가..

Spring-Security 2025.05.29

Spring Security 예외 처리: ExceptionTranslationFilter와 exceptionHandling

1. Spring Security 예외 처리 유형Spring Security에서 주로 다루는 예외는 크게 두 가지 핵심 유형으로 나뉩니다.AuthenticationException (인증 예외)정의: 사용자의 신원(Identity)을 확인하는 과정에서 발생하는 모든 문제를 포괄합니다.발생 시점: 사용자가 제공한 자격 증명(아이디, 비밀번호)이 유효하지 않거나, 계정이 잠겨있거나, 존재하지 않는 사용자일 때 등 로그인 시도 중에 발생합니다.예시: BadCredentialsException (잘못된 자격 증명), DisabledException (비활성화된 계정), UsernameNotFoundException (사용자 없음), AccountExpiredException (만료된 계정) 등.처리 목적: 사용..

Spring-Security 2025.05.29

essionManagementFilter & ConcurrentSessionFilter

✅ SessionManagementFilter📌 언제 작동되나요?인증이 성공한 직후에 작동합니다.보통 UsernamePasswordAuthenticationFilter 다음에 위치합니다.📌 어떤 역할을 하나요?현재 인증된 사용자에게 세션이 필요한지 확인세션이 존재하지 않으면 생성 (정책에 따라 다름)세션 고정 공격 방지 처리기본은 changeSessionId()세션 관련 전략 수행SessionAuthenticationStrategy를 실행📌 내부 프로세스 요약1. 인증 성공2. SessionManagementFilter 실행3. SessionAuthenticationStrategy 실행 └ 예: ConcurrentSessionControlAuthenticationStrategy └ 예: Ch..

Spring-Security 2025.05.29

세션 생성 정책

정책 설명 예ALWAYS요청마다 항상 세션 생성테스트나 세션에 상태를 반드시 저장해야 하는 경우IF_REQUIRED (기본값)필요할 때만 세션 생성 (예: 로그인 등)일반적인 웹 애플리케이션NEVERSpring Security는 세션을 생성하지 않지만, 이미 존재하면 사용함외부에서 세션을 관리할 때STATELESS세션 절대 생성 또는 사용 안 함REST API, JWT 기반 인증 (완전 무상태)✅ 사용 예시 코드http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS);✅ 언제 어떤 걸 써야 할까? 상황 추천 정책JWT 기반 REST APISTATELESS일반 로그인 기반 웹IF_REQUIRED세션 직접 컨트롤 필..

Spring-Security 2025.05.29

세션 고정 보호

✅ 세션 고정 공격이란?세션 고정 공격(Session Fixation)은 공격자가 사용자의 세션 ID를 미리 고정해두고, 사용자가 로그인할 때 같은 세션을 사용하도록 유도하여 권한을 탈취하는 공격입니다.예시:공격자가 고정된 세션 ID로 사용자를 사이트에 접속시킴.사용자가 로그인 → 세션 ID가 유지됨 → 공격자는 세션 ID를 알고 있음 → 탈취 가능.✅ Spring Security의 세션 고정 보호 기본값http .sessionManagement() .sessionFixation().changeSessionId(); // 기본값✅ 주요 전략 비교 전략설명장점단점changeSessionId()로그인 시 세션 ID만 변경 (기존 세션 속성 유지)빠르고 효율적, 사용자 경험 좋음오래된 컨테이너에서는 미..

Spring-Security 2025.05.29

동시 세션 제어

동시 세션 제어는 하나의 계정으로 동시에 로그인할 수 있는 세션 수를 제한하는 기능입니다.예를 들어, 한 계정이 이미 로그인한 상태에서 다른 곳에서 또 로그인하면:기존 세션을 만료시킬 수도 있고,새 로그인 시도를 막을 수도 있습니다.✅ 기본 설정 방식Spring Security는 SessionManagementConfigurer를 통해 이 기능을 제공합니다.✅ 예제 코드: 최대 1개의 세션만 허용@Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http ..

Spring-Security 2025.05.29