CSRF는 사이트 간 요청 위조인 Cross-Site Request Forgery의 약자로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하며 특정 웹페이지를 보안에 취약하게 한다거나 데이터의 수정, 삭제 등의 동작을 하게 만드는 공격방법입니다.
공격방식은 위 사진과 같습니다.
해당 방법과 같이 게시글 외에도 CSRF 코드가 포함된 이메일을 통해서도 공격할 수 있다. 실제로 2008년 옥션 해킹 사고도 CSFR공격이었다고 합니다.
1. Referrer 검증
2. CAPTCHA사용
3. CSRF 토큰 사용 (Spring Security에서 지원)
스프링 시큐리티는 기본적으로 CSFR Token을 사용하여 CSRF공격을 막아주는 CsrfFilter를 제공합니다.
동작 방법은 다음과 같습니다.
CsrfFilter는 client로부터 request가 있을 경우 csrf token을 발급합니다. 그 후 client는 PATCH, POST, PUT, DELETE request를 보낼 때는 csrk token을 header에 담아서 request를 보내며 server에서는 server에 저장된 csrf값과 비교를 하고 값이 같지 않다면 AccessDeniedException을 발생시키고 값이 같다면 해당 request를 처리해줍니다.
CsrfFilter의 활성화/비활성화는 다음과 같은 방법으로 설정할 수 있습니다.
해당 설정의 default값은 활성화 되는 것입니다.
http.csrf(); // 활성화
http.csrf().disabled(); // 비활성화