読者です 読者をやめる 読者になる 読者になる

ポリシーをオリジン全体に適応する Origin Policy

WICGで議論されている「Set origin-wide policies via a manifest」の仕様がGoogleのMike West氏から提案されています。この「Origin Policy」と言う仕様は、氏のGithubリポジトリから確認できます。


これは、Content-Security-PolicyやReferrer-Policyといったレスポンスヘッダでリソースごとに毎回指定していたものを、Origin Policy Manifestとしてオリジンに対して指定できるようにするものです。


クライアントは、このマニフェストに書かれているヘッダがレスポンスヘッダに付いていると仮定して処理を行います。

サーバはまず、レスポンスヘッダのOrigin-Policyヘッダでマニフェストファイルの場所を指示します。

HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
...
Origin-Policy: "policy-1"


Origin-Policyを受信したクライアントは、そのマニフェストファイルを取りに行きます。Origin Policyのマニフェストファイルは.well-known/origin-policy/に置くことになっており、今回は「https://example.com/.well-known/origin-policy/policy-1」から取得します。
このマニフェストファイルもHTTP/2のPushを使用することで遅延を抑えられる旨仕様に書かれています。マニフェストファイルは以下の様になっています

{
  "headers": {
    "fallback": [
      {
        "name": "Content-Security-Policy",
        "value": "script-src 'self' https://cdn.example.com"
      },
      {
        "name": "Referrer-Policy",
        "value": "origin-when-cross-origin"
      }
    ],
    "baseline": [
      {
        "name": "Content-Security-Policy",
        "value": "object-src 'none'; frame-ancestors 'none'"
      },
      {
        "name": "Strict-Transport-Security",
        "value": "max-age=10886400; includeSubDomains; preload"
      },
      {
        "name": "X-Content-Type-Options",
        "value": "nosniff"
      }
    ]
  },
  "cors-preflight": { /* TODO(mkwst): Syntax? */ },
}

baselineは今後の全てのレスポンスヘッダに追加して解釈されるもので、fallbackは今後のレスポンスヘッダに該当のヘッダがなかった場合に追加して解釈されるヘッダが指定されます。

cors-preflightは、サーバがCORSの通信を解釈できることを示しています。クライアントは幾つかのCORS-preflightリクエストが成功することを前提に出来るようです。


クライアントは以降より、リクエストヘッダに適応しているマニフェストファイル名をOrigin-Policyヘッダに付加します。(適応しているOrigin Policyが無ければ、「Origin-Policy: 0」)

Origin-Policy: "policy-1"
|<<