728x90
setHTMLUnsafe란?
- React나 Vue, Svelte같은 프레임워크에서 HTML 콘텐츠를 동적으로 삽십할 때 사용되는 메서드 중 하나
- 이름에 Unsafe가 붙는데 의미 그대로 안전하지 않다는 뜻을 가진다.
- 프레임워크에서 XSS (Cross-Site Scripting) 보호를 위해 기본적으로 HTML 콘텐츠를 Escape 처리하지만, 개발자가 이를 우회하여 **"원시 HTML"**을 직접 삽입하고자 할 때 사용한다.
XSS (Cross-Site Scripting) 란?
악의적인 사용자가 웹 어플리케이션에 스크립트 (보통은 자바스크립트)를 삽입하여 다른 사용자에게 전달하고 실행하게 만드는 보안 취약점을 말한다.
⇨ 악의적인 사용자가 웹사이트에 악성 코드(스크립트)를 심고, 그 코드를 다른 사용자의 브라우저에서 실행시키는 공격
- 신뢰할 수 있는 데이터만 setHTMLUnsafe, @html, innerHTML 등 사용 필요
- sanitization (뜻: 살균, 정화) 사용
사용자 입력 데이터를 깨끗하고 안전하게 처리하는 과정 (XSS와 같은 공격을 방지하기 위해 악의적인 코드나 태그를 제거, 변환하는 작업을 의미)
<script>
let htmlString = '<p>Hello <strong>World</strong>!</p>';
</script>
<div>{@html htmlString}</div>
innerHTM과 비교
- innerHTML은 JavaScript의 표준 DOM API에서 사용되는 속성
- 특정 엘리먼트의 HTML 콘텐츠를 문자열로 삽입하거나 가져올 수 있다.
<div id="content"></div>
<script>
const htmlString = '<p>Hello <strong>World</strong>!</p>';
document.getElementById('content').innerHTML = htmlString;
</script>
setHTMLUnsafe와 innerHTML의 차이점
| 구분 | setHTMLUnsafe (프레임워크) | innerHTML (DOM API) |
| 동작 대상 | 가상 DOM (React, Vue, Svelte 등) | 실제 DOM |
| 보안 | 기본적으로 Escape 처리, 우회용으로 사용 | Escape 처리 없음 |
| 주의할 점 | 외부 입력값 처리 시 XSS 위험 | XSS에 취약 |
| 사용 목적 | 프레임워크에서의 강제 HTML 삽입 | DOM 조작 |
| 사용법 | dangerouslySetInnerHTML / v-html / {@html} 등 | element.innerHTML = '...' |
어떻게 주의해서 사용할까?
- XSS 방어 하기 위해 외부 데이터는 반드시 Escape하거나 Sanitization 처리 후 삽입
- 가능하면 setHTMLUnsafe 대신 안전한 렌더링 방식을 고려 (예: React/Vue/Svelte 컴포넌트로 변환)
- innerHTML도 동일한 보안 취약점 존재하므로 주의 필요
728x90
'TECH' 카테고리의 다른 글
| CSS에서 사용되는 단위들 (0) | 2025.05.28 |
|---|---|
| as const (0) | 2025.05.27 |
| content-visibility 속성 (2) | 2025.05.22 |
| ZonedDateTime (6) | 2025.05.19 |
| Swiper (0) | 2024.10.25 |