*CSRF
란?*CSRF(Cross-Site Request Forgery)
는 요청을 위조하여 사용자가 원하지 않아도 서버측으로 특정 요청을 강제로 보내는 방식이다. (회원정보 변경, 게시글CRUD
를 사용자 모르게 요청
CSRF disable()
Security Config
클래스를 통해 csrf
설정을 disable
설정하였다. 배포 환경에서는 csrf
공격 방지를 위해서 csrfdisable
설정을 제거하고 추가적인 설정을 진행해야 한다.XSS
공격이 있는데, CSRF
와의 차이점으로는
XSS
공격은 악성 코드가 클라이언트에서 발생CSRF
공격은 악성 코드가 서버에서 발생CSRF
설정 enable()// http
// .csrf((auth) -> auth.disable());
disable()
해놨던 CSRF
설정을 주석처리하고 애플리케이션을 실행 시킨 뒤 다시 로그인을 진행 해보면 로그인이 되지 않는다.CSRF
설정은 disable()
설정을 해두지 않으면 시큐리티에서 자동으로 enable()
설정으로 진행하게 되는데,
enable()
설정 시 CsrfFilter
를 통해서 POST
, PUT
, DELETE
요청에 대해서 토큰 검증을 진행한다.CSRF
토큰<aside> ✨
*login.mustache*
(csrf.tocken
추가)POST
요청에서 설정방법(mustache
기준)
CSRF
토큰을 받아서
이 토큰을 다시 서버측으로 보내줘야 한다.
</aside><aside> ✨
*login.mustache*
(ajax
요청 시 - 비동기 방식)POST
요청 말고도 PUT
, DELETE
요청도 토큰을 넣어서 진행해야한다.
</aside><aside> ✨
SecurityConfig
클래스 로그아웃 설정LogoutController
application.properties
GET
방식 로그아웃을 진행할 경우 설정 방법
CSRF
설정 시 POST
요청으로 로그아웃을 진행해햐 하지만 위 방식을 통해 CSRF
설정이 enable()
이라도 GET
방식으로 진행할 수 있다.application.properties
파일에
</aside>API
서버의 경우 csrf.disable()
?앱에서 사용하는
API
서버의 경우 보통JWT
를 발급해서세션을STATELESS
로 관리하기 때문에 스프링 시큐리티csrf enable
설정을 진행하지 않아도 된다.