💡 CSRF(Cross-Site Request Forgery) 란 직역하면 사이트 간 요청 위조 라는 뜻이다.
클라이언트 www.legday.com 사이트에 가입을 한다고 가정해보자
1. 클라이언트가 서버에게 회원가입 페이지에 접속 요청을 한다.
2. 서버는 회원가입 뷰를 넘겨주면서 회원가입 뷰에 있는 아이디,비밀번호를 입력하는 input 폼에 CSRF 토큰을 숨긴채로 클라이언트 뷰를 보여준다.
- 아래와 같이 csrf 옵션에 KFC(예시)라는 난수를 달아서 Client에게 응답해준다.
<form class="login__input" action="/auth/signup" method="post"> <input type="text" name="username" placeholder="유저네임" required="required" csrf="KFC"/> <input type="password" name="password" placeholder="패스워드" required="required" csrf="KFC" /> <input type="email" name="email" placeholder="이메일" required="required" csrf="KFC"/> <input type="text" name="name" placeholder="이름" required="required" csrf="KFC"/> <button>가입</button> </form>
- 물론 사용자는 CSRF 토큰이 있는지 알지 못한다.
- 클라이언트는 아이디와 비밀번호를 입력 후 서버로 요청을 한다.
- 서버는 input 폼에 CSRF 토큰이 있는지 검사후 있다면 서버가 뷰를 응답해준 클라이언트라고 확인이 되어 정상 사용자라고 인식한다.
즉, 서버가 정상적인 사용자인지 아닌지 구분할 때 CSRF 토큰 검사를 한다.
@Configuration // IoC
public class SecurityConfig {
@Bean
SecurityFilterChain configure(HttpSecurity http) throws Exception{
http.csrf().disable(); // 이부분이 CSRF 토큰 검사를 비활성화 하는 코드
// 생략...
return http.build();
}
}