스터디-Spring

[스프링 시큐리티] CsrfFilter - CSRF 공격 방지

일태우 2022. 2. 7. 22:46
반응형

CSRF(Cross-site Request Forgery) - 사이트 간 요청 위조

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0%EF%BB%BF

 

사이트 간 요청 위조 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

과정

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

 

교차 출처 리소스 공유 (CORS) - HTTP | MDN

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라

developer.mozilla.org

 

1. CsrfFilter는 CsrfToken을 세션에 저장

2. 사용자가 리소스를 요청할 때 페이지에 Hidden으로 숨어있는 Token 값을 같이 요청하게됨

3. CsrfFilter는 해당 토큰을 세션에 저장된 토큰과 비교하여 해당 요청이 위조된 요청인지 확인

4. 공격자의 페이지에서는 해당 토큰이 세션에 있는 토큰과 일치할리가 없으므로 CSRF 방어를 할 수 있다.

Spring Security의 login form에 있는 csrf token

HttpSecurity에서 csrf().disable()하게되면 CsrfFilter는 동작하지 않는다(FilterChain에서 빠짐)

 

Web Page기반의 웹서비스에서는 꼭 CSRF Filter를 사용하여 해당 공격을 방지하자..

반응형