CSP: trusted-types

HTTP の Content-Security-Policy (CSP) の trusted-types Experimental ディレクティブは、既知の DOM XSS シンクの使用を、文字列の代わりにスプーフィング不可能な型付きの値のみを受け入れる定義済みの関数のセットに制限するようにユーザエージェントに指示します。

require-trusted-types-for (en-US) ディレクティブと一緒に使用することで、作者は DOM への値の書き込みを守るルールを定義することができ、 DOM XSS 攻撃の対象をウェブアプリケーションのコードベースの小さな孤立した部分に減らすことができ、監視やコードレビューが容易になります。このディレクティブは、 Trusted Types API から TrustedTypes.createPolicy で作成された信頼できる型のポリシー名のホワイトリストを宣言します。

構文

Content-Security-Policy: trusted-types;
Content-Security-Policy: trusted-types 'none';
Content-Security-Policy: trusted-types <policyName>;
Content-Security-Policy: trusted-types <policyName> <policyName> 'allow-duplicates';
<policyName>

有効なポリシー名は英数字、または "-#=_/@.%" のうちのいずれかのみからなります。ポリシー名に星印 (*) を使用すると、ユーザーエージェントは任意の一意なポリシー名を許可するようになります('allow-duplicates' はそれをさらに緩和することができます)。

'none'

Trusted Type ポリシーを作成しない(_<policyName>_を指定しないのと同じ)。

'allow-duplicates'

既に使用されている名前でポリシーを作成することを可能にします。

// Content-Security-Policy: trusted-types foo bar 'allow-duplicates';

if (typeof trustedTypes !== 'undefined') {
  const policyFoo = trustedTypes.createPolicy('foo', {});
  const policyFoo2 = trustedTypes.createPolicy('foo', {});
  const policyBaz = trustedTypes.createPolicy('baz', {}); // Throws and dispatches a SecurityPolicyViolationEvent.
}

仕様書

Specification
Trusted Types
# trusted-types-csp-directive

ブラウザーの互換性

BCD tables only load in the browser

関連情報