- 웹의 주요 취약점인 XSS 공격을 방지하기 위해 Firefox 148이 표준화된 Sanitizer API를 최초로 지원
- 이 API는 신뢰할 수 없는 HTML을 DOM 삽입 전 자동 정화(sanitize) 하여 악성 스크립트를 제거
- 기존의 innerHTML 대신 setHTML() 메서드를 사용하면 기본적으로 안전한 HTML 삽입이 가능
- 개발자는 기본 설정이 과하거나 부족할 경우 맞춤형 설정을 통해 허용할 요소와 속성을 제어할 수 있음
- Firefox의 이 기능은 Trusted Types와 결합해 웹 전반의 보안 수준을 높이고, 개발자가 별도 보안팀 없이도 XSS를 예방할 수 있게 함
XSS 취약점과 Firefox의 대응
-
교차 사이트 스크립팅(XSS) 은 사용자가 입력한 콘텐츠를 통해 공격자가 임의의 HTML이나 JavaScript를 삽입할 때 발생
- 공격자는 이를 이용해 사용자 상호작용을 감시하거나 데이터를 탈취할 수 있음
- XSS는 거의 10년간 상위 3대 웹 취약점(CWE-79) 으로 분류되어 왔음
- Firefox는 2009년부터 Content-Security-Policy(CSP) 표준을 주도하며 XSS 방어를 강화해 왔음
- CSP는 웹사이트가 로드 및 실행할 수 있는 리소스를 제한함
- 그러나 기존 사이트 구조 변경과 지속적인 보안 검토가 필요해 광범위한 채택에는 한계가 있었음
Sanitizer API와 setHTML()의 역할
-
Sanitizer API는 악성 HTML을 무해한 형태로 변환하는 표준화된 방법을 제공
- 예시 코드에서 <img src="x" onclick="alert('XSS')"> 요소는 제거되고 <h1>Hello my name is</h1> 만 남음
-
setHTML() 메서드는 HTML 삽입 시 자동으로 정화 과정을 수행해 기본적으로 안전한 동작을 보장
- 기존의 innerHTML 대입을 setHTML()로 교체하는 것만으로 강력한 XSS 방어 가능
- 개발자는 기본 설정이 너무 엄격하거나 느슨할 경우, 커스텀 설정을 통해 허용할 HTML 요소와 속성을 정의할 수 있음
- 실험을 위해 Sanitizer API playground 도구를 활용할 수 있음
Trusted Types과의 결합
-
Trusted Types API는 HTML 파싱과 삽입을 중앙에서 제어해 추가적인 보안 계층을 제공
-
setHTML() 사용 시 Trusted Types 정책을 쉽게 적용할 수 있음
- 엄격한 정책은 setHTML()만 허용하고 다른 위험한 삽입 방식을 차단해 미래의 XSS 회귀 방지에 기여
Firefox 148의 보안 향상 효과
- Firefox 148은 Sanitizer API와 Trusted Types를 모두 지원해 기본 보안 수준을 크게 향상
- 개발자는 복잡한 보안 정책이나 별도의 보안팀 없이도 간단한 코드 변경만으로 XSS 방지 가능
- 이 표준의 도입은 모든 브라우저의 안전한 웹 환경 확산으로 이어질 것으로 기대됨
요약
- Firefox 148은 setHTML() 메서드와 Sanitizer API를 통해 웹 개발자가 손쉽게 XSS 공격을 차단할 수 있도록 지원
- 이 기능은 CSP의 한계를 보완하며, 기본적으로 안전한 HTML 삽입 방식을 웹 표준으로 정착시키는 계기임
-
Trusted Types와의 결합으로 장기적인 보안 유지와 XSS 회귀 방지가 가능함
- 결과적으로, Firefox는 보안이 기본값인 웹 환경으로의 전환을 주도하고 있음