Web

CSRF 취약점과 방어 방법에 대해 알아보자!

hoonylab 2025. 4. 25. 17:15
728x90
반응형

✅ CSRF는 언제 발생하고, RESTful API에서는 안전한가?

CSRF(Cross-Site Request Forgery)는 웹 보안에서 자주 언급되는 취약점입니다. 많은 개발자들이 궁금해하는 부분 중 하나가 "RESTful API는 CSRF에 안전한가?"입니다. 이 글에서는 그에 대한 정확한 설명과 주의할 점들을 정리해봅니다.

🔍 CSRF는 어떤 상황에서 발생하나요?

CSRF는 브라우저가 인증 정보를 자동으로 서버에 전송할 때 발생합니다. 즉, 쿠키 기반 세션 인증 방식이 대표적인 예입니다.

조건설명
쿠키 기반 세션 인증브라우저가 요청 시 쿠키를 자동 전송
서버가 세션 유지상태(stateful) 기반 인증
로그인 상태 유지 중공격자가 위조 요청을 보낼 수 있음

✅ REST API는 CSRF에 안전한가요?

일반적으로 RESTful API는 stateless하며, 인증 정보를 헤더(Authorization)에 직접 명시하기 때문에 CSRF에 안전합니다.

  • REST API는 쿠키를 사용하지 않고
  • 브라우저가 자동으로 인증 정보를 전송하지 않기 때문에
  • 공격자가 인증된 요청을 위조할 수 없습니다.

⚠️ 예외 상황: REST API도 CSRF에 노출될 수 있어요

다음과 같은 경우에는 REST API라도 CSRF 공격에 취약할 수 있습니다.

  1. JWT를 쿠키에 저장하고,
  2. 브라우저가 자동으로 쿠키를 전송(withCredentials: true)하고,
  3. CORS 설정이 허술하거나 SameSite 정책이 None일 경우

이런 상황에서는 REST API라도 CSRF 방어가 필요합니다.

🧭 CSRF 위험 여부 요약

상황CSRF 위험설명
서버 세션 + 쿠키 인증🔴 있음일반적인 Spring MVC 방식
JWT in 쿠키 + 자동 전송🟠 조건부 있음CORS/SameSite 설정 주의
JWT in 헤더 (Authorization)🟢 거의 없음REST API 권장 방식

💡 결론

RESTful API는 기본적으로 CSRF에 안전하지만, JWT를 쿠키에 저장하고 자동으로 전송하는 구조라면 CSRF를 반드시 고려해야 합니다.

보안 권장 방식:

  • JWT는 localStorage 또는 메모리에 저장
  • 매 요청 시 Authorization 헤더에 토큰을 명시
  • 쿠키 사용 시 SameSite=Strict 또는 Lax 설정
728x90
반응형