피드로 돌아가기
Dev.toSecurity
원문 읽기
BFF 패턴 도입을 통한 브라우저 내 Token 탈취 가능성 원천 차단
Your React app is one XSS away from a full account takeover
AI 요약
Context
기존 SPA 아키텍처에서 Access Token을 localStorage나 JS 메모리에 저장하는 방식은 XSS 공격 시 Token 탈취 및 계정 탈취로 이어지는 구조적 취약점 보유. PKCE 도입이나 메모리 저장 방식만으로는 악성 스크립트에 의한 Token 유출 및 외부 서버에서의 무단 사용을 방지하기 어려운 한계 존재.
Technical Solution
- BFF(Backend for Frontend) 패턴을 통한 Token 저장소의 서버 측 이전 설계
- Cloudflare Workers를 사용하여 OAuth Flow(Redirect, Code Exchange, Refresh)를 서버 사이드에서 전담 처리
- Access/Refresh Token을 Cloudflare KV에 저장하고 클라이언트에는 opaque한 Session ID만 전달하는 구조 채택
- HttpOnly, Secure, SameSite=Lax, __Host- 접두사가 적용된 세션 쿠키를 사용하여 JS 접근을 완전히 차단
- API 요청 시 Worker가 세션 ID로 KV에서 Token을 조회하여 Authorization Header를 주입하는 Proxy 메커니즘 구현
- 클라이언트 사이드에서 Token 관리 로직(Storage, Refresh Scheduling, OAuth Library)을 완전히 제거하여 프론트엔드 복잡도 감소
실천 포인트
1. 브라우저 내 JWT/Access Token 저장 여부 전수 조사 및 제거 검토
2. HttpOnly 및 __Host- 접두사 쿠키 설정을 통한 JS 접근 차단 적용
3. OAuth 흐름을 클라이언트가 아닌 서버 사이드 Proxy(BFF)에서 처리하는 구조로 전환
4. Local 개발 환경에서 Safari의 __Host- 쿠키 HTTP 차단 제약 사항 확인 및 TLS 프록시 설정