Firefox 148에 표준화된 Sanitizer API가 최초로 탑재되면서, setHTML()로 안전한 기본값을 제공하고 XSS를 더 쉽게 예방할 수 있게 되었습니다.
YouTube의 Hacks Twitter의 @mozhacks Hacks RSS 피드 Firefox 다운로드
게시일: 2026년 2월 24일 — 분류: 주요 기사, Firefox, Firefox 릴리스, 웹 개발자
크로스 사이트 스크립팅(XSS)은 여전히 웹에서 가장 널리 퍼진 취약점 중 하나입니다. 새로 표준화된 Sanitizer API는 신뢰할 수 없는 HTML을 DOM에 삽입하기 전에 이를 정화(sanitize)할 수 있는 간단한 방법을 웹 개발자에게 제공합니다. Firefox 148은 이 표준화된 보안 강화 API를 최초로 탑재한 브라우저로서, 모두를 위한 더 안전한 웹으로 나아가고 있습니다. 다른 브라우저들도 곧 뒤따를 것으로 예상합니다.
XSS 취약점은 웹사이트가 사용자 생성 콘텐츠를 통해 공격자가 임의의 HTML이나 JavaScript를 주입할 수 있게 되는 경우에 발생합니다. 이 공격을 통해 공격자는 사용자 상호작용을 감시하고 조작할 수 있으며, 취약점이 악용 가능한 상태로 남아 있는 한 지속적으로 사용자 데이터를 탈취할 수 있습니다. XSS는 예방이 악명 높을 정도로 어려운 긴 역사를 가지고 있으며, 거의 10년 동안 상위 3대 웹 취약점 (CWE-79) 중 하나로 꼽혀 왔습니다.
Firefox는 XSS 해결책에 초기부터 깊이 관여해 왔으며, 2009년에 Content-Security-Policy(CSP) 표준을 주도한 것이 그 시작입니다. CSP는 브라우저가 로드하고 실행할 수 있는 리소스(스크립트, 스타일, 이미지 등)를 웹사이트가 제한할 수 있게 해 주어, XSS에 대한 강력한 방어선이 됩니다. 그러나 지속적인 개선과 유지보수에도 불구하고, 기존 웹사이트에는 상당한 아키텍처 변경과 보안 전문가의 지속적인 검토가 필요하기 때문에 CSP는 충분한 도입률을 확보하지 못했고, 그 결과 웹의 “롱테일”까지 보호하기에는 역부족이었습니다.
Sanitizer API는 그 격차를 메우기 위해, 악성 HTML을 무해한 HTML로 바꾸는—즉 정화하는—표준화된 방법을 제공하도록 설계되었습니다. setHTML() 메서드는 정화를 HTML 삽입 과정에 직접 통합하여, 기본값으로 안전성을 제공합니다. 다음은 단순한 위험 HTML을 정화하는 예입니다:
jsdocument.body.setHTML(`<h1>Hello my name is <img src="x" onclick="alert('XSS')">`);
이 정화 과정은 HTML<h1> 요소는 허용하는 반면, 포함된 <img> 요소와 그 onclick 속성은 제거하여 XSS 공격을 제거합니다. 그 결과 다음과 같은 안전한 HTML이 생성됩니다:
html<h1>Hello my name is</h1>
개발자는 오류를 유발하기 쉬운 innerHTML 할당을 setHTML()로 바꾸는 것만으로도, 최소한의 코드 변경으로 더 강력한 XSS 보호를 적용할 수 있습니다. 특정 사용 사례에서 setHTML()의 기본 구성이 너무 엄격하거나(혹은 충분히 엄격하지 않다면), 유지/제거해야 할 HTML 요소와 속성을 정의하는 사용자 정의 구성을 제공할 수 있습니다. 웹페이지에 도입하기 전에 Sanitizer API를 실험해 보고 싶다면, Sanitizer API 플레이그라운드를 살펴보는 것을 권장합니다.
더 강력한 보호를 위해 Sanitizer API는 HTML 파싱과 주입에 대한 제어를 중앙화하는 Trusted Types와 결합할 수 있습니다. setHTML()이 도입되면 사이트는 대개 복잡한 사용자 정의 정책 없이도 Trusted Types 강제(enforcement)를 더 쉽게 활성화할 수 있습니다. 엄격한 정책은 setHTML()은 허용하면서 다른 안전하지 않은 HTML 삽입 메서드는 차단하도록 할 수 있어, 향후 XSS 회귀(regression)를 방지하는 데 도움이 됩니다.
Sanitizer API는 기존 코드에서 innerHTML 할당을 setHTML()로 쉽게 교체할 수 있게 해 주며, XSS 공격으로부터 사용자를 보호하기 위한 새로운 “더 안전한 기본값”을 도입합니다. Firefox 148은 Sanitizer API와 Trusted Types를 모두 지원하여 더 안전한 웹 경험을 제공합니다. 이러한 표준을 채택하면, 전담 보안 팀이나 큰 구현 변경 없이도 모든 개발자가 XSS를 예방할 수 있게 됩니다.
위 삽화 이미지 크레딧: Website, by Desi Ratna; Person, by Made by Made; Hacker by Andy Horvath.
Tom Schuster 소개
Tom Schuster의 다른 글…
Frederik Braun 소개 Frederik Braun은 베를린에서 웹과 Mozilla Firefox를 위한 보안을 구축하고 있습니다. 표준 기여자로서 Frederik은 Sanitizer API와 Subresource Integrity 같은 명세를 통해 기본값에 보안을 내장함으로써 웹 플랫폼도 개선하고 있습니다. 일하지 않을 때는 좋은 소설을 읽거나 유럽을 가로지르는 장거리 자전거 여행을 즐깁니다.
Christoph Kerschbaumer 소개 Christoph Kerschbaumer는 소프트웨어 엔지니어링과 컴퓨터 보안 분야에서 20년이 넘는 경험을 보유하고 있습니다. 그의 전문 분야에는 실패-안전 기본값(fail-safe defaults)을 갖춘 안전한 시스템 설계, 크로스 사이트 스크립팅 취약점 완화, 머신-인-더-미들 공격 방지, 신뢰할 수 있는 AI 시스템을 위한 보안 기반 발전 등이 포함됩니다. 그는 현재 Mozilla에서 Firefox Security Engineering 팀을 이끌고 있습니다. 또한 캘리포니아 대학교 어바인(University of California, Irvine)에서 컴퓨터 과학 박사 학위를 받았으며, 그의 연구는 웹 브라우저에서의 정보 흐름 추적 기법에 초점을 맞추었습니다.
Mozilla 개발자 뉴스레터 구독:
이메일
지금 구독하기
이전에 Mozilla 관련 뉴스레터 구독을 확인한 적이 없다면, 확인 절차가 필요할 수 있습니다. Mozilla로부터 온 이메일이 받은편지함이나 스팸함에 있는지 확인해 주세요.
별도 표기가 없는 한, 이 사이트의 콘텐츠는 Creative Commons Attribution Share-Alike License v3.0 또는 그 이후 버전으로 라이선스가 부여됩니다.