CSRF(Cross-site Request Forgery) - 사이트 간 요청 위조
과정
1. 이용자는 웹사이트에 로그인하여 정상적인 쿠키를 발급(인증을 받은 상태라는 뜻)
2. 공격자가 메일로 다음과 같이 코드를 심어 보냄
<img src="http://taeu.kr/password-change?id=admin&pw=admin">
위의 URL은 패스워드를 변경하는 URL이고 인증이 되어있어야만 접근가능
3. 이용자가 메일을 읽으면 브라우저는 이미지 파일을 받아오기 위해 위의 URL을 조회함
4. 이용자의 브라우저는 인증이 되어있는 상태(쿠키를 가지고있음)이므로 정상적으로 admin의 pw를 admin으로 변경하게됨
CORS를 사용할 때 특히 조심해야함
CORS(Cross-Origin Resource Sharing) - 교차 출처 리소스 공유
단어 그대로 다른 Origin(Protocol + Host + Port)에서의 리소스를 공유하는 것기본적으로 Same Origin Policy가 적용된다 즉 같은 Origin에 한해서 리소스를 공유 할 수 있다CORS를 적용하면 해당 적용된 Origin도 리소스를 공유 받을 수 있게 된다.
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
1. CsrfFilter는 CsrfToken을 세션에 저장
2. 사용자가 리소스를 요청할 때 페이지에 Hidden으로 숨어있는 Token 값을 같이 요청하게됨
3. CsrfFilter는 해당 토큰을 세션에 저장된 토큰과 비교하여 해당 요청이 위조된 요청인지 확인
4. 공격자의 페이지에서는 해당 토큰이 세션에 있는 토큰과 일치할리가 없으므로 CSRF 방어를 할 수 있다.
HttpSecurity에서 csrf().disable()하게되면 CsrfFilter는 동작하지 않는다(FilterChain에서 빠짐)
Web Page기반의 웹서비스에서는 꼭 CSRF Filter를 사용하여 해당 공격을 방지하자..
'스터디-Spring' 카테고리의 다른 글
[스프링 시큐리티] UsernamePasswordAuthenticationFilter - Form 인증 처리 필터 (0) | 2022.02.09 |
---|---|
[스프링 시큐리티] LogoutFilter - 로그아웃 처리 필터 (0) | 2022.02.08 |
[스프링 시큐리티] HeaderWriterFilter (0) | 2022.01.30 |
[스프링 시큐리티] SecurityContextPersistenceFilter (0) | 2022.01.30 |
[스프링 시큐리티] @Async & WebAsyncManagerIntegrationFilter (0) | 2022.01.21 |