
우선 CSRF 는 Cross-Site Request Forgery로 사이트 간에 위조 요청을 의미한다.
이를 해석해 보면, 사용자의 의도와는 관계없이 공격자의 의도대로 사이트에 수정, 삭제 등의 요청이 전송되도록 유도하여 서버를 공격하는 것을 말한다.
즉, CSRF protection은 spring security에서 default로 설정된다. 이는, Get 요청을 제외한 POST, PUT, PATCH, DELETE 요청으로 부터 데이터의 손상을 보호한다.
CSRF protection을 적용한 경우, 요청 헤더에 csrf 토큰이 포함되어야 요청을 받아들이게 된다.
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
이처럼 보안을 위해 사용하는 CSRF protection을 왜 disable 해주었는가?


Spring Security Doc 에서 non-browser clients 만을 위한 서비스의 경우, csrf 를 disable 해도 좋다고 되어 있다.
이 이유는 REST API를 이용한 서버의 경우, session 기반 인증과는 다르게 stateless하기 때문에 서버에 인증정보를 보관하지 않게 된다.
client는 권한이 필요한 요청을 위해서는 요청에 필요한 인증 정보(JWT, OAuth 등...)를 포함하고 있어야 한다.
따라서 서버에 인증정보를 저장하고 있지 않기 때문에, 굳이 불필요한 CSRF 코드들을 작성할 필요가 없다.