W3Cは、そこと呼ばれるHTML5.1で新しい属性であると言うnonceためには、styleおよびscriptそのウェブサイトのコンテンツセキュリティポリシーで使用することができます。
私はそれについてググりましたが、最終的に、この属性が実際に何をするか、それを使用すると何が変わるのかわかりませんでしたか?
scriptをロードすることができなかったことを意味しますstyleか?ホットリンク禁止のようなもの?
W3Cは、そこと呼ばれるHTML5.1で新しい属性であると言うnonceためには、styleおよびscriptそのウェブサイトのコンテンツセキュリティポリシーで使用することができます。
私はそれについてググりましたが、最終的に、この属性が実際に何をするか、それを使用すると何が変わるのかわかりませんでしたか?
scriptをロードすることができなかったことを意味しますstyleか?ホットリンク禁止のようなもの?
回答:
このnonce属性を使用すると、CSP ディレクティブ(すべてのインライン/ を許可する)の使用を回避しながら、特定のインラインscriptおよびstyle要素を「ホワイトリスト」に登録unsafe-inlineできるため、一般にインライン/ を禁止する主要なCSP機能を保持できます。scriptstylescriptstyle
したがって、このnonce属性は、特定のスクリプトまたはスタイル要素のインラインコンテンツが一部の(悪意のある)サードパーティによってドキュメントに挿入されたのではなく、ドキュメントが提供されるサーバーを制御する人によって意図的にドキュメントに挿入されたことをブラウザに伝える方法ですから。
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_itは、nonce属性の使用方法の良い例を示しています。これは、次の手順になります。
Webサーバーが特定のドキュメントについて受信するすべての要求について、バックエンドに、暗号化された安全な乱数ジェネレータから少なくとも128ビットのデータのランダムなbase64エンコード文字列を生成させます。例えば、EDNnf03nceIOfn39fn3e9h3sdfa。それはあなたのナンスです。
ステップ1で生成されたノンスを取得し、インラインscript/ style「ホワイトリスト」にしたい場合は、バックエンドコードnonceがそのノンスを値として送信される前に、ドキュメントに属性を挿入します。
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>ステップ1で生成されたnonceを先頭に付加nonce-し、バックエンドでscript-srcorのソースリストの値の中でCSPヘッダーを生成しますstyle-src。
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'したがって、ナンスを使用するメカニズムは、代わりにバックエンドにインラインのコンテンツのハッシュを生成させるscriptかstyle、許可したい場合の代替手段であり、そのハッシュをCSPヘッダーの適切なソースリストで指定します。
ブラウザーはページリクエスト間で変更されたナンス値の変更を確認できない(できない)ため、上記の1をスキップして、バックエンドでノンスに対して動的に何もしないようにすることは可能です(まったくお勧めできません)。ちょうど置くことができnonce、あなたのドキュメントのHTMLソースに静的な値を持つ属性を、その同じノンス値と静的CSPヘッダを送信します。
しかし、静的ナンスをそのように使用したくない理由は、最初からナンスを使用する目的全体をかなり損なっているからです。なぜなら、そのような静的ナンスを使用すると、その時点では、単にを使用することもできますunsafe-inline。
nonce属性の使用に力を入れる理由がある限り、絶対に使用する必要がない場合は使用しないでください。これは本当に、何らかの理由で特定のドキュメントからインラインスクリプトやスタイルコンテンツを(まだ)削除できない場合にのみ意味があります(ただし、後で削除する必要があります)。そのため、何らかの理由でインラインスクリプトとスタイルのコンテンツを保持する必要がある場合は、少なくともnonceメカニズムを使用して、ブラウザに問題がないことを確認させることができます。それ以外の場合は、実際に意図したとおりにCSPを完全に使用し、インラインスクリプトやスタイル要素を許可しないでください
<script type="text/javascript" nonce>andのあるページが表示されます<style type="text/css" nonce>