이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
사이트 간 요청 위조 - CSRF, CsrfFilter
Form 인증 - CSRF (사이트 간 요청 위조)
- 사용자는 쇼핑몰에 인증 후 쿠키를 발급받는다.
- 공격자는 링크를 이용자에게 전달한다.
- 사용자는 공격자가 제공한 링크를 클릭해 공격용 웹페이지에 접속한다.
- 이미지 소스는 사용자가 접속한 쇼핑몰의 링크이다.
- 공격자주소가 추가로 존재한다.
- 사용자가 공격용 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 공격용 URL을 연다.
- 사용자의 브라우저에는 인증 후 발급받은 쿠키가 존재한다.
- 사용자는 쿠키가 저장된 브라우저로 공격자가 제공한 링크를 클릭해 공격자주소로 요청한다.
- 쇼핑몰은 자신이 제공한 쿠키가 브라우저에 존재하는지 검사한다.
- 현재 사용자의 브라우저에는 쇼핑몰이 발급한 쿠키가 존재하므로 정상적인 요청으로 판단된다.
- 사용자의 승인이나 인지 없이 배송지가 등록됨으로써 공격이 완료된다.
- 스프링 시큐리티는 CSRF(사이트 간 요청 위조)를 방지하기 위해 API를 제공한다.
Form 인증 - CsrfFilter
- 모든 요청에 랜덤하게 생성된 토큰을 HTTP 파라미터로 요구
- 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다.
- 클라이언트는 form 태그에 hidden 타입으로 서버에서 발급한 토큰명과 토큰값을 설정 가능하다.
- HTTP 메소드 중 PATCH, POST, PUT, DELETE로 요청 시 반드시 CSRF 토큰명과 토큰값으로 요청해야 한다.
- 스프링 시큐리티에서 제공하는 CSRF 기능을 사용하면 위에서 본 CSRF 문제 해결이 가능하다.
- 사용자가 공격자가 제공한 링크를 클릭해 쇼핑몰에 요청하더라도 해당 요청에는 CSRF 토큰명과 토큰값이 없으므로 요청이 수락되지 않을 것이다.
- 타임리프 사용 시 CSRF 토큰을 자동으로 생성해준다.
- JSP 사용 시 form 태그에 히든 값으로 파라미터명 토큰명을 설정해야 정상적으로 동작한다.
'스프링 시큐리티 > 스프링 시큐리티 기본 API 및 Filter 이해' 카테고리의 다른 글
예외 처리 및 요청 캐시 필터: ExceptionTranslationFilter, RequestCacheAwareFilter (0) | 2023.01.27 |
---|---|
권한설정과 표현 (0) | 2023.01.27 |
세션 제어 필터: SessionManagementFilter, ConcurrentSessionFilter (0) | 2023.01.11 |
동시 세션 제어, 세션 고정 보호, 세션 정책 (0) | 2023.01.11 |
익명 사용자 인증 필터: AnonymousAuthenticationFilter (0) | 2023.01.11 |