스프링 프로젝트에 Spring Security
를 적용하면 자동으로 CSRF에 대한 설정이 적용됩니다.
Spring Security
는 Spring 기반의 어플리케이션에서 인증,권한 등의 보안을 담당하는 프레임워크입니다.
그럼 CSRF는 뭔가요?
Cross Site Request Forgery의 줄인말입니다.
직역해 보면 '교차 사이트 요청 위조'네요.
다음 상황을 봅시다.
예를 들어 네이버 검색 을 누르면 A사이트
는 현재 사이트, B사이트
는 네이버 검색이 되는 것입니다.
검색과 같은 단순한 요청이라면 위의 링크와 같이 문제없이 나오겠습니다만.. 만약 회원 정보와 같은 중요한 정보의 경우는 어떨까요?
간단한 회원가입 요청 페이지를 보겠습니다.
이메일과 패스워드를 입력하고 Submit을 누르면 서버에 HTTP POST
요청이 갈겁니다.
그런데 Request가 가지 않습니다.
403 Forbidden은 서버가 요청은 받았지만 권한이 없어 거절하였다는 뜻입니다.
Spring Security
를 적용하면 기본적으로 CSRF에 대한 기능이 적용되기 때문에, form
을 사용할 때 CSRF에 대한 규칙을 따라주지 않으면 이렇게 요청을 하지 못하도록 막아버립니다! form
태그에 추가적인 작업이 필요하겠군요.
뭔가 바뀐것을 눈치채셨나요?
input type이 hidden인 태그를 하나 만들어주고, 거기에 name = _csrf.parameterName
과 value=_csrf.token
을 넣어주면 HTTP Session의 생명주기와 같은 CSRF Token을 손쉽게 이용할 수 있습니다!