CSRF 토큰

Legday_Dev·2023년 9월 4일
0

Spring

목록 보기
4/14
post-thumbnail

💡 CSRF(Cross-Site Request Forgery) 란 직역하면 사이트 간 요청 위조 라는 뜻이다.

CSRF 토큰을 알기 전에 웹 브라우저의 HTTP 통신을 간단히 알고 넘어가야 한다.


클라이언트 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>
  1. 물론 사용자는 CSRF 토큰이 있는지 알지 못한다.
  2. 클라이언트는 아이디와 비밀번호를 입력 후 서버로 요청을 한다.
  3. 서버는 input 폼에 CSRF 토큰이 있는지 검사후 있다면 서버가 뷰를 응답해준 클라이언트라고 확인이 되어 정상 사용자라고 인식한다.

즉, 서버가 정상적인 사용자인지 아닌지 구분할 때 CSRF 토큰 검사를 한다.

CSRF 토큰검사 활성/비활성화 코드


  • Security 를 설정하는 config 클래스에서 아래와 같이 적어주면 된다.
@Configuration // IoC
public class SecurityConfig {

  @Bean
  SecurityFilterChain configure(HttpSecurity http) throws Exception{
      http.csrf().disable(); // 이부분이 CSRF 토큰 검사를 비활성화 하는 코드
      // 생략...
      return http.build();
  }
}
profile
백엔드개발자

0개의 댓글