CSRF( Cross Site Request Forgery ) 사이트 간 요청 위조 공격
-
사용자가 인증을 완료하여 서버에서 JSESSIONID를 받급 받는다.
-
공격자는 이메일과 같은 방법으로 링크를 사용자에게 전달
-
사용자가 링크를 여는 즉시 사용자의 브라우저는 이미지파일을 로딩하기위해 img 태그의 src 속성 값으로 서버 주소, 공격자의 주소 값으로 요청을 보낸다.
-
결국 인증된 사용자의 브라우저로 요청이 가므로 서버는 쿠키를 검사하고 인증된 사용자로 판단
-
사용자는 승인, 인지 없이 공격자의 배송지가 등록됨으로 공격이 완료된다.
Form 인증 - CsrfFilter
-
SpringSecurity 는 모든 Request 에 대해 랜덤하게 생성된 CsrfToken 을 HTTP Prameter 로 요구한다.
-
Request 시 전달된 CsrfToken 값과 서버에 저장된 CsrfToken 값을 비교하여 일치하지 않으면 AccessDeniedHandler 와 같은 처리를 하여 Request는 실패한다.
-
Client : Form 인증시 input:hidden[name=${_csrf.parameterName}][value=${_csrf.token}] 컴포넌트를 추가해주어 요청시 추가되도록 한다.
-
HTTP Method : PATCH, POST, PUT, DELETE 방식을 채용한다.
Spring Security의 CSRF 설정정보
-
http.csrf() : default 값
-
http.csrf().disabled() : 비활성화
CsrfFilter 적용 후 의 CSRF 공격
-
사용자가 인증을 성공하고 , JSESSIONID 와 함께 CsrfToken 을 발급 받는다.
-
공격자가 사용자에게 이메일과 같은 방법으로 CSRF 공격을 시도
-
img태그의 src 속성에 있는 주소 값으로 서버에 요청을 보내도 CsrfToken은 존재하지않기 때문에 서버는 해당 요청을 받지않는다.
Spring Frame Work 의 CustomTag : form 과 Thymeleaf 에서의 CsrfToken
Thymeleaf 와 같은 뷰 템플릿 엔진에서는 기재하지 않아도 기본적으로 CsrfToken 을 보내준다.
-
POST 방식 요청 시
Spring 의 form 태그 사용 시에도 기본적으로 CsrfToken을 보내준다.
위의 방법 없이 JSP 사용 시에는 적용되지 않기 때문에 input:hidden 태그를 작성하여 적용시켜줘야한다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
15.필터 초기화와 다중 보안 설정 (0) | 2020.09.21 |
---|---|
14.DelegatingFilterProxy, FilterChainProxy (0) | 2020.09.21 |
12.ExceptionTranslationFilter, RequestCacheAwareFilter (0) | 2020.09.21 |
11. 권한 설정과 표현식 (0) | 2020.09.21 |
10.SessionManagementFilter, ConcurrentSessionFilter (0) | 2020.09.21 |