Trusted Typesポリシージェネレーターとは
Trusted Typesは、innerHTML、eval()、script.srcなどの危険なDOMシンクに対して、文字列の代わりに型付き値を要求することで、DOMベースのXSSを防止するブラウザセキュリティAPIです。開発者はtrustedTypes.createPolicy()を使用して、信頼されていない文字列がインジェクションシンクに到達する前に変換または拒否するサニタイゼーションルールを定義します。Content-Security-Policyディレクティブと組み合わせることで、Trusted Typesは明示的に許可された操作のみが高リスクのDOMプロパティに値を割り当てられるように強制することで、XSS脆弱性の主要なクラスを排除します。
クイックアンサー
Trusted Typesは、文字列がinnerHTMLやeval()などの危険なDOMシンクに到達するのをブロックすることで、DOMベースのXSSを防止します。trustedTypes.createPolicy()とcreateHTML/createScript/createScriptURL操作を使用し、Content-Security-Policy: require-trusted-types-for 'script'で強制します。既存の機能を破壊しないよう、常に最初にContent-Security-Policy-Report-Onlyを使用してレポート専用モードでテストしてください。
Last updated: 2026-05-31
制限事項
- Trusted TypesにはChrome 83+、Edge 83+、Safari 17+のブラウザサポートが必要です。Firefoxは2026年現在Trusted Typesをサポートしていません。アプリケーションは、サポートされていないブラウザ向けにフォールバック動作を提供して、Firefoxでも問題なく動作するように処理する必要があります。
- Trusted TypesはすべてのXSSベクターをカバーするわけではありません。DOMインジェクションシンク(innerHTML、outerHTML、insertAdjacentHTML、eval、document.write)は保護しますが、URL属性(href、src)、イベントハンドラ属性、またはCSSベースのインジェクションベクターを介したXSSは防止しません。
- 大規模アプリケーションのTrusted Typesへの移行には、かなりのリファクタリングが必要です。すべてのinnerHTML、insertAdjacentHTML、outerHTML、document.writeの使用法をポリシーでラップする必要があり、広範な動的DOM操作を行うレガシーコードベースでは数百のソース変更が必要になる可能性があります。
Sources:MDN Web Docs · W3C Specifications · jquery.app on GitHub
使い方
- 許可する操作(createHTML、createScript、createScriptURL)を設定し、各操作が入力をどのように処理するかを決定します。厳格な拒否(すべての信頼できない入力をブロック)、サニタイゼーション(サニタイザー関数を通す)、または信頼できるソースのパススルー。
- CSPモードを選択します。enforce(Content-Security-Policyでrequire-trusted-types-for 'script')は違反をブロックし、report-only(同じディレクティブをContent-Security-Policy-Report-Onlyに)は違反をブロックせずにログ記録します。移行中は必ずreport-onlyモードから始めてください。
- サーバープラットフォーム(NginxまたはApache)を選択し、既存のサーバーブロックまたはバーチャルホストと統合する対応するCSPヘッダー設定を生成します。
- ポリシーのJavaScriptファイルとサーバー設定をデプロイし、report-onlyモードでアプリケーションをテストします。コンソールの違反レポートを確認してポリシーを調整し、違反がなくなるまで続けてからenforceモードに切り替えます。
主な用途
- すべてのHTMLインジェクションポイントが設定されたサニタイザー関数を持つTrusted Typesポリシーを通過するように要求することで、コンテンツの多いウェブアプリケーションをストアドXSSおよびリフレクテッドXSSから保護します。
- 最初にreport-onlyモードでデプロイし、コードベース全体で違反レポートを段階的に修正してから、完全なenforceモードに切り替えることで、レガシーアプリケーションをTrusted Typesに移行します。
- 外部ウィジェットや埋め込みがinnerHTMLを介して動的コンテンツをロードするサードパーティスクリプトが多い環境で厳格なTrusted Typesポリシーを適用し、すべての注入されたHTMLがポリシーを通過することを保証します。