Feature Policy、ブラウザの特定機能を無効にする仕様

W3CでFeature Policyという仕様が議論されています。仕様は著者であるGoogleのIlya Grigorik氏のリポジトリ(URL)より確認できます。


このドキュメントはまだW3C公式のドキュメントとはなってはいませんが、先月行われたFace-to-Faceのミーティングでも議論がされています(議事録)

Feature Policy

セキュリティやパフォーマンスの観点で、Webデベロッパーがブラウザの特定のAPI(機能)を無効にしたい場合もあります。


そこで、 Feature-Policyヘッダを用いて以下のようにブラウザの機能を制限できるようにするのがこの仕様です。


また、このFeature-Policyヘッダは現在IETFで議論が行われている"A JSON Encoding for HTTP Header Field Values"(URL)というHTTPヘッダ値にjson形式を用いる仕様を利用している点も興味深いです。


なお、このFeature Policyを利用するためには、HTTPSである必要があります( HTTPS stateがmodernかつ、 potentially trustworthyなURL)

sample1

webrtc及び、geolocationを無効にする

  Feature-Policy: {"disable":["webrtc","geolocation"]}
sample2

https://example.comにおいてgeolocationを無効にし、javascriptからdocument.cookieへのアクセスがあった場合はレポートを送信する(ブロックは行わない)
レポートはReporting APIの仕様(URL) で定義されています。

  Feature-Policy: {"disable":["geolocation"], "target":["https://example.com"]},
          {"disable":["cookie"], "mode":"report", "report-to":"default"}
sample3

同期のxhr, asyncのないscript読み込み、document.writeを無効にし、違反があった場合はレポートする

  Feature-Policy: {"disable":["sync-xhr","sync-script","docwrite"], "report-to":"perf-violations"}

Directives

Feature-Policyでは、以下のディレクティブをして出来ます

  • mode: enforceかrepotを指定します。reportの場合はレポートのみを行うモードです
  • target: Feature-Policyを適応するオリジンの配列
  • report-to: Reporting API(URL)で定義される、レポート先
  • disable: 無効にする機能

指定できるAPI

Feature-Policyで無効に出来る機能は、今のところ以下のとおりです

  • cookie: document.cookieへのアクセス
  • domain: document.domainへのアクセス
  • docwrite: document.writeへのアクセス
  • geolocation: Geolocation API
  • midi: Web MIDI API
  • notifications: Notification API
  • push: Push API
  • sync-script: sciprtタグで読み込まれるjsでasyncやdeferのついていないもの
  • sync-xhr: 同期xhr
  • webrtc: WebRTC