
2026/02/24 22:04
**「InnerHTML に別れ、SetHTML にこんにちは:Firefox 148で強化された XSS 対策」**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(欠落しているポイントを含む)**
クロスサイト・スクリプティング(XSS)は、依然として最も重要な Web 脆弱性の一つです。Mozilla の新しい Sanitizer API は、信頼できない HTML を DOM に到達する前にクリーンアップするための標準化された、開発者フレンドリーな方法を提供します。
Firefox 148 がこの標準化済み API を搭載した最初のブラウザであり、他のブラウザも間もなく採用すると予想されます。Firefox 148 では、
メソッドが危険なタグや属性を自動的に除去します―例えばsetHTML()document.body.setHTML('<h1>Hello my name is <img src="x" onclick="alert(\"XSS\")"></h1>');は安全な出力
を生成します。開発者は<h1>Hello my name is</h1>の代わりにinnerHTMLを使用することで、コードの変更を最小限に抑えつつ、カスタム設定オプションで厳格さを調整できます。setHTML()この API は Trusted Types ともシームレスに連携し、HTML の解析と注入に関する制御を集中化します。その結果、不正な挿入方法は一律ブロックされます。Firefox 148 が Sanitizer API と Trusted Types 両方をサポートしていることで、大幅な実装変更や専用のセキュリティチームを必要とせずに、より安全な Web エクスペリエンスが実現します。
Mozilla は 2009 年に Content‑Security‑Policy(CSP)で XSS 対策を先駆けましたが、その複雑さが広範な採用を遅らせました。Sanitizer API はそのレガシーを継承し、現在は標準化されているため、すべてのブラウザにとってよりアクセスしやすくなりました。API が Firefox 148 を超えて広がるにつれて、開発者はアプリケーションのセキュリティ確保へのハードルを下げ、ユーザーと業界全体の Web セキュリティ衛生状態を向上させることができます。
本文
クロスサイト・スクリプティング(XSS)は、ウェブ上で最も広く見られる脆弱性の一つです。新しく標準化された Sanitizer API は、開発者が信頼できない HTML を DOM に挿入する前に簡単にサニタイズできる方法を提供します。Firefox 148 は、この安全性強化 API を最初に搭載したブラウザであり、すべてのユーザーにとってより安全なウェブへ向けた進歩です。他のブラウザも間もなく追随すると期待しています。
XSS の脆弱性は、サイトが偶然にも攻撃者にユーザー生成コンテンツを通じて任意の HTML や JavaScript を注入させてしまうときに発生します。この攻撃では、攻撃者がユーザーの操作を監視・操作し、脆弱性が利用可能な限り継続的にデータを盗むことができます。XSS は長い歴史を持ち、予防が極めて難しいことで有名であり、CWE‑79 のトップ 3 ウェブ脆弱性の一つとしてほぼ10年間にわたり位置づけられてきました。
Firefox は初期段階から XSS 対策に深く関与しており、2009 年に Content‑Security‑Policy(CSP)標準を主導しました。CSP により、サイトはブラウザが読み込んで実行できるリソース(スクリプト、スタイル、画像など)を制限でき、XSS への強固な防御線を提供します。改善とメンテナンスの継続的な取り組みにもかかわらず、CSP は既存サイトに大幅なアーキテクチャ変更とセキュリティ専門家による継続的レビューが必要であるため、ウェブ全体を保護するには十分な採用率に達しませんでした。
Sanitizer API は、そのギャップを埋めるために設計されました。悪意のある HTML を安全な HTML に変換(サニタイズ)する標準化された方法を提供します。
setHTML() メソッドは、サニタイズを直接 HTML 挿入に統合し、デフォルトで安全性を確保します。例:
document.body.setHTML( `<h1>Hello my name is <img src="x" onclick="alert('XSS')">` );
このサニタイズは
<h1> 要素を許可しつつ、埋め込まれた <img> 要素とその onclick 属性を削除します。結果として XSS 攻撃が排除され、安全な HTML が生成されます:
<h1>Hello my name is</h1>
開発者は、エラーが起きやすい
innerHTML の代わりに setHTML() を使用するだけで、最小限のコード変更でより強力な XSS 保護を実装できます。デフォルト設定があるユースケースに対して厳しすぎる(または緩すぎる)場合は、開発者がカスタム構成を提供し、保持する HTML 要素と属性、および削除対象を定義できます。Sanitizer API をウェブページに導入する前に試したい方は、Sanitizer API プレイグラウンドで実験してみてください。
さらに強力な保護を求める場合、Sanitizer API は Trusted Types と組み合わせて使用できます。Trusted Types は HTML のパースと挿入を集中管理し、
setHTML() が採用されると、サイトは複雑なカスタムポリシーなしで Trusted Types の実行を簡単に有効化できるようになります。厳格なポリシーは setHTML() を許可しつつ、他の安全でない HTML 挿入方法をブロックし、将来の XSS 回帰を防止します。
Sanitizer API は既存コードにおける
innerHTML の代替として簡単に導入でき、新たな安全デフォルトを提供することでユーザーを XSS 攻撃から保護します。Firefox 148 は Sanitizer API と Trusted Types 両方をサポートし、安全なウェブ体験を実現しています。これらの標準を採用すれば、専任のセキュリティチームや大規模な実装変更なしに全ての開発者が XSS を防止できます。
イラストの画像クレジット:ウェブサイトは Desi Ratna、人物は Made by Made、ハッカーは Andy Horvath。
Tom Schuster の他の記事…
Frederik Braun はベルリンからウェブと Mozilla Firefox のセキュリティを構築しています。標準への貢献者として、彼は Sanitizer API や Subresource Integrity などの仕様でデフォルトにセキュリティを組み込むことでウェブプラットフォームを改善しています。仕事以外では良い小説を読むか、ヨーロッパ全土で長距離自転車旅行に出ることが好きです。
Frederik Braun の他の記事…
Christoph Kerschbaumer はソフトウェアエンジニアリングとコンピュータセキュリティの分野で20年以上の経験を持ちます。彼の専門知識は、フェイルセーフなデフォルトを備えた安全なシステム設計、クロスサイト・スクリプティング脆弱性の緩和、中間者攻撃の防止、信頼できる AI システムのためのセキュリティ基盤の推進などに及びます。現在、彼は Mozilla の Firefox Security Engineering チームを率いています。カリフォルニア大学・アイランズ校でコンピュータサイエンス博士号を取得し、研究ではウェブブラウザにおける情報フロー追跡技術に焦点を当てました。
Christoph Kerschbaumer の他の記事…