FlawOpen

flawopen.com/XSS/SVG 업로드

SVG 업로드는 XSS 위험이 있나요?

참고 페이지
핵심 답변

업로드된 SVG는 단순한 픽셀이 아니라 문서이며 스크립트나 이벤트 핸들러 같은 활성 요소를 포함할 수 있습니다. 실행 여부는 브라우저 컨텍스트에 달려 있습니다. <img>는 제한된 이미지 컨텍스트지만 인라인, 직접 탐색, 문서 임베딩은 활성화될 수 있습니다.

SVG가 다른 이미지 형식과 다른 점

PNG나 JPEG와 달리 SVG는 활성 콘텐츠를 포함할 수 있는 XML입니다. 브라우저는 <img> 같은 제한된 이미지 컨텍스트에서는 스크립트를 비활성화하지만 직접 열기, <object>, <iframe>, <embed>를 통한 문서 임베딩 또는 인라인 삽입에서는 그렇지 않습니다. 애플리케이션 origin의 활성 문서 컨텍스트에서 제공되는 프로필 이미지가 stored XSS가 될 수 있습니다. 동작은 컨텍스트에 달렸으며 확장자와 MIME은 정화가 아닙니다.

업로드를 안전하게 처리하기

자주 묻는 질문

파일 확장자나 MIME 유형을 검증하면 해결되나요?

['파일 확장자나 MIME 유형을 검증하면 해결되나요?', '아닙니다. 확장자와 선언된 MIME은 메타데이터일 뿐 활성 문서 콘텐츠를 확인하지 않습니다. 실제 형식을 검증한 뒤 SVG 전용 allowlist 정화기를 적용하거나 SVG 기능이 필요하지 않으면 래스터 형식으로 변환하세요.']

참고 자료

함께 보기 크로스 사이트 스크립팅(XSS, CWE-79): 동작 원리와 언어별 방어 방법 — flawopen.com Vue v-html XSS 위험과 안전한 사용법 WKWebView loadHTMLString은 신뢰할 수 없는 콘텐츠에 안전한가요? 반사형·저장형·DOM 기반 XSS는 어떻게 다른가요? Android addJavascriptInterface 보안 위험 Angular XSS 방어: 안전한 기본값과 우회 API MIME sniffing XSS: Content-Type과 nosniff