web-dev-qa-db-ja.com

Chromeは、CSPの 'require-sri-for'ディレクティブが現在無効になっているフラグの背後に実装されていると通知するのはなぜですか?

コンテンツセキュリティポリシーにrequire-sri-for scriptを含めました。ただし、Chromeコンソールでは、通知が表示されます(エラーではなく情報のみ):

Content-Security-Policyディレクティブ 'require-sri-for'は、現在無効になっているフラグの背後に実装されています。

私がこれを解釈できる限り、それは私がとにかく無効にされている何かのためにSRIを要求しようとしていることを私に伝えています。たとえば、私がscript-src 'none'を持っている場合、require-sri-for scriptを使用しても意味がありません。とにかく、すべてのスクリプトが許可されていないからです。

ただし、script-src 'self'を使用すると、通知が表示されます。

この通知の適切な意味は何ですか?それを修正するために何をする必要がありますか?

4
jamieweb

Chromeはディレクティブを知っていると伝えますが、ブラウザーは現在、適用されるかどうかに関係なく、それを無視するように構成されています。

SRI(サブリソースの整合性)は W3C推奨 として2016年6月からですが、コンテンツセキュリティポリシーディレクティブであるrequire-sri-forは、8月に 編集者のドラフト で後に導入されました2016.下書きはディスカッションのためにのみ提供されており、いつでも変更される可能性があります。そして、このような実験的な機能は通常、デフォルトで有効になっていないため、実装、仕様、またはその両方。

Chromeはポリシーでディレクティブを検出するたびに、最初に実験的な機能が有効かどうかをチェックし、有効な場合はディレクティブとその値を解析します。実験的な機能が有効でない場合はメッセージを記録しますあなたが見ている:

Content-Security-Policyディレクティブ 'require-sri-for'は、現在無効になっているフラグの背後に実装されています。

スクリプトが後でscript-src 'none'で無効になる場合でもメッセージを報告します。メッセージは、ディレクティブの解析時に早期にコンソールに記録されます。ソースコードの CSPDirectiveList::AddDirective method で確認できます。

メッセージを消すには、2つのオプションがあります。

  1. #enable-experimental-web-platform-featureschrome://flags/を有効にし(これをコピーしてchrome://flags/#enable-experimental-web-platform-featuresをChromeに貼り付け、ブラウザを再起動します)、ポリシーをテストしてrequire-sri-forの出荷時に準備ができるようにしますただし、これにより、メッセージがブラウザから削除され、ブラウザの試験運用機能を有効にしたユーザーのごく一部が削除されます

  2. ポリシーからrequire-sri-forを削除します。たとえば、script-src 'none'を使用しているため不要な場合は、スクリプトを検証する必要がある場合に後で追加し直します。

  3. Chromeがすべてのユーザーの機能を有効にするまで待機します。それまでは、ロードされたスクリプトの整合性を確認していなくても、コンソールにメッセージが表示されます。

私はオプション3で個人的に行っていますが、require-sri-forが出荷されたらサイトが機能するかどうかを確認するために一時的にフラグを有効にしています。

7
Michal Špaček

これは、require-sri-for機能がchrome://flagsで無効になっていることを意味します。しかし、これを可能にする関連フラグを見つけることができませんでした。

Mozillaのドキュメント は、require-sri-forがChromeでサポートされているとv54以降ですが、最新バージョンのChromeとChromium、これはそうではないようです。

これはChromeの既知のバグで、現在修正されていないようです。

2018-03-29を編集:承認された回答をMichalŠpaček'sに変更しました-ミステリーフラグは#enable-experimental-web-platform-featuresです。

3
jamieweb

ブラウザベンダーが新機能を展開するとき、彼らはしばしば最初にそれらをフラグの後ろに隠します。ユーザーは、この機能を使用するために明示的にオプトインする必要があります。これにより、ベンダーは少数のユーザーを「実験」することができます。 Chromeでは、chrome://flagsページ。

したがって、表示されるメッセージは、Chromeでアクティブ化しない限り、この機能はアクティブではないことを示しています。このディレクティブの Mozillaページ を見てください。 Chrome 54以降のフラグなしでオンにする必要があります。ただし、Firefoxにはフラグが必要ですが、IE/Edgeはそれをまったく実装していません。

つまり、require-sri-for CSPディレクティブは、一部のユーザーを保護しますが、すべてのユーザーを保護するわけではありません。しかし、あなた自身が指摘するように、もしあなたがscript-src 'none'とにかく禁止されているスクリプトにSRIを要求する意味はありません。

1
Anders