ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSRF를 diable 하는 이유
    스터디/Web 2025. 1. 29. 00:25
    728x90

     

    최근 Spring Security를 작업하다가 습관적으로 CSRF(Cross-Site Request Forgery)를 비활성화하는 모습을 발견했습니다. 왜 CSRF를 disable해야 하는지, 그리고 CSRF란 무엇인지 자세히 알아보려고 합니다.

     

    CSRF란?

    CSRF는 Cross-Site Request Forgery의 약자로, 교차 사이트 위조 요청을 의미합니다. 이는 사용자 몰래 위조된 요청을 서버에 보내는 공격 기법입니다. 직관적으로 이해하기 어렵지만, 공격의 구체적인 과정을 보면 왜 "Cross-Site"라는 이름이 붙었는지 알 수 있습니다.

     

    CSRF 공격의 과정

    1. 정상적인 사이트(Sonny)에 로그인
    2. 사용자는 sonny.com에 로그인합니다. 서버는 사용자 인증 후 브라우저에 쿠키를 생성하고 저장합니다. 이 쿠키는 sonny.com 도메인에서만 유효합니다.
    3. 악성 사이트(devil.com)에 방문
    4. 사용자가 악성 사이트 devil.com을 방문하면, 해당 사이트는 sonny.com에 요청을 보내는 악성 링크나 코드를 포함하고 있습니다.
    5. 사용자가 악성 링크를 클릭
    6. 사용자가 악성 링크를 클릭하면, 브라우저는 자동으로 sonny.com에 쿠키를 전송합니다. sonny.com 서버는 이 요청이 정상 사용자의 브라우저에서 온 것으로 인식하고, 악의적인 요청을 처리합니다.

    결과적으로, 공격자는 사용자 몰래 sonny.com 서버의 리소스를 악용하거나 사용자의 데이터를 조작할 수 있습니다.

     

     

    토큰 기반 인증에서는 CSRF 방어가 필요 없는 이유

     

    최근에는 세션 기반 인증 대신 토큰 기반 인증이 널리 사용됩니다. 토큰 기반 인증은 서버가 상태를 저장하지 않는 stateless 특성을 가지므로, CSRF disable 해도 된다고 Security 문서에 작성되어 있습니다.

     

     

     

    RefreshToken을 쿠키에 저장하고 있는데, 괜찮은가?

     

    RefreshToken을 쿠키에 저장하여 클라이언트에게 반환하고 있습니다. 쿠키에 저장해 전달하는 이유는 HTTP Only 및 Secure 옵션을 사용하기 때문에 XSS 공격을 막을 수 있고, HTTPS로 암호화가 되어있기 때문에 쿠키 값을 알아내기 힘들다고 판단했기 때문이다.

     

    여기서 의문이 들었습니다. 토큰을 사용하는 것이기 때문에 CSRF 공격에 취약하지 않을까?

     

    조금 더 깊이 생각해보면, CSRF 공격은 위조 요청을 행하는 것입니다. 그리고 RefreshToken을 가지고 수행할 수 있는 요청은 토큰 재발급밖에 없습니다. 즉, 공격의 수가 하나의 API로 제한되어 방어하기 더 용이해집니다.

     

    결론 

     

    토큰 기반 인증 방식을 사용하는 서비스에서 Spring Security에서 CSRF를 비활성화하는 것은 토큰을 사용하는 특정 API에 적절한 보안 조치를 적용한다면 괜찮은 선택이라고 생각합니다.

     

    728x90

    '스터디 > Web' 카테고리의 다른 글

    DNS(Domain Name System)  (0) 2024.01.21
    토큰을 사용한 인증과 인가  (0) 2023.07.10
    토큰을 사용하는 이유  (0) 2023.07.03
    Postman에서 토큰 자동 설정하는 방법  (1) 2023.05.14
    JWT에 대하여  (0) 2023.03.31
Designed by Tistory.