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 공격에 취약할 수 있습니다.
- JWT를 쿠키에 저장하고,
- 브라우저가 자동으로 쿠키를 전송(
withCredentials: true
)하고, - 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
반응형