Firefox 148의 setHTML 도입으로 강화된 XSS 보호

2 days ago 3

  • 웹의 주요 취약점인 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 APITrusted Types를 모두 지원해 기본 보안 수준을 크게 향상
  • 개발자는 복잡한 보안 정책이나 별도의 보안팀 없이도 간단한 코드 변경만으로 XSS 방지 가능
  • 이 표준의 도입은 모든 브라우저의 안전한 웹 환경 확산으로 이어질 것으로 기대됨

요약

  • Firefox 148은 setHTML() 메서드와 Sanitizer API를 통해 웹 개발자가 손쉽게 XSS 공격을 차단할 수 있도록 지원
  • 이 기능은 CSP의 한계를 보완하며, 기본적으로 안전한 HTML 삽입 방식을 웹 표준으로 정착시키는 계기임
  • Trusted Types와의 결합으로 장기적인 보안 유지와 XSS 회귀 방지가 가능함
  • 결과적으로, Firefox는 보안이 기본값인 웹 환경으로의 전환을 주도하고 있음

Read Entire Article