React의 자동 이스케이프와 XSS 방어
React가 XSS를 방어해주는 것이 맞습니다
React는 CSRF가 아니라 XSS 공격을 방어하는 기능을 제공합니다:
jsx
// ✅ 안전 - React가 자동으로 이스케이프 처리
const userInput = "<script>alert('XSS')</script>";
return <div>{userInput}</div>;
// 렌더링 결과: <script>alert('XSS')</script>
// 실제 스크립트가 실행되지 않고 텍스트로 표시됨자동 이스케이프란?
React는 JSX 내에서 중괄호 {}로 삽입되는 값들을 자동으로 HTML 엔티티로 변환합니다:
<→<>→>"→"'→'
이렇게 변환되면 악성 스크립트 태그가 실제 코드로 실행되지 않고 단순 텍스트로 표시됩니다.
하지만 완벽하지 않은 이유
jsx
// ❌ 위험 - dangerouslySetInnerHTML 사용 시
<div dangerouslySetInnerHTML={{__html: userInput}} />
// 이 경우 이스케이프 없이 그대로 HTML로 렌더링됨
// ❌ 위험 - href에 javascript: 프로토콜
<a href={userInput}>Click</a>
// userInput이 "javascript:alert('XSS')" 같은 값이면 위험
// ❌ 위험 - 사용자 입력을 eval()이나 Function()에 전달
eval(userInput);