문제 상황
회원정보를 수정하기 위해 form 태그 안의 input 태그에 값을 입력하고 컨트롤러에 요청
문제
- 올바른 Url과 Method로 요청을 했는데 자꾸 403에러가 발생했다.
해결
- 403에러가 발생하는 이유 중 하나로 Spring Security에서 기본적으로 사용하는 CSRF(Cross-Site Request Forgery) 방어 기능이 있다.
- CSRF는 악의적인 사용자가 인증된 사용자의 권한으로 비인가적인 요청을 보내는 공격으로, 이를 방어하기 위해 Spring Security는 CSRF 토큰을 사용하여 요청이 유효한지 검사한다.
- CSRF 토큰이 유효하지 않은 경우, Spring Security는 403 Forbidden 에러를 반환한다. 따라서 CSRF 방어 기능을 사용하고 있다면, CSRF 토큰을 함께 전송해야 한다.
<form th:action="@{/myform}" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<button type="submit">전송</button>
</form>