W3Cは、そこと呼ばれるHTML5.1で新しい属性であると言うnonce
ためには、style
およびscript
そのウェブサイトのコンテンツセキュリティポリシーで使用することができます。
私はそれについてググりましたが、最終的に、この属性が実際に何をするか、それを使用すると何が変わるのかわかりませんでしたか?
script
をロードすることができなかったことを意味しますstyle
か?ホットリンク禁止のようなもの?
W3Cは、そこと呼ばれるHTML5.1で新しい属性であると言うnonce
ためには、style
およびscript
そのウェブサイトのコンテンツセキュリティポリシーで使用することができます。
私はそれについてググりましたが、最終的に、この属性が実際に何をするか、それを使用すると何が変わるのかわかりませんでしたか?
script
をロードすることができなかったことを意味しますstyle
か?ホットリンク禁止のようなもの?
回答:
このnonce
属性を使用すると、CSP ディレクティブ(すべてのインライン/ を許可する)の使用を回避しながら、特定のインラインscript
およびstyle
要素を「ホワイトリスト」に登録unsafe-inline
できるため、一般にインライン/ を禁止する主要なCSP機能を保持できます。script
style
script
style
したがって、この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-src
orのソースリストの値の中で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>