Trusted Types を使用して DOM ベースの XSS を軽減する

Trusted Types は、危険な挿入ポイント(.innerHTML など)が検証されていない文字列値を使用するのをブロックすることで、特定の DOM ベースの XSS 攻撃を防ぐのに役立つウェブ プラットフォームのセキュリティ機能です。リスクの高いインジェクション ポイントがブロックされると、違反が発生します。

Content-Security-Policy(CSP)ヘッダーは、require-trusted-types-for ディレクティブを使用して Trusted Types を適用します。

Lighthouse 監査が失敗する仕組み

CSP 応答ヘッダーまたは DOM ベースの XSS を軽減するための Trusted Types ディレクティブが欠落していることを示す Lighthouse レポートの警告。
CSP レスポンス ヘッダーがないか、DOM ベースの XSS を軽減するための Trusted Types ディレクティブがないことを示す Lighthouse レポートの警告。

CSP ヘッダーが require-trusted-types-for ディレクティブとスクリプトを値として設定されている場合、監査は合格します。CSP ヘッダーが設定されていない場合、または設定されていても Trusted Types ディレクティブがない場合、監査は失敗します。

DOM ベースの XSS を軽減するために CSP ヘッダーと Trusted Types ディレクティブを構成する

ユーザー エージェントは require-trusted-types-for ディレクティブを使用して、DOM XSS シンク関数に渡されるデータを制御します。このディレクティブの script 値は、DOM XSS インジェクション シンク関数が文字列を許可するのではなく、Trusted Type ポリシーによって生成された型のみを受け入れることを検証します。

Content-Security-Policy: require-trusted-types-for 'script';