VueJSを使用して開発したWebサイト(つまり、単一ページのアプリケーション)があります。コンテンツセキュリティポリシーヘッダーの実装を検討してきました。必要なヘッダー値をテストしたところ、「安全でないインライン」スクリプトを許可する必要があることに気付きました。
私はこれをかなり読み回しましたが、 'unsafe-inline'を適用する必要がある場合、CSPヘッダーは実際にはあまり機能しないことを示すたくさんのコメントを見つけました。
だから私の質問です。 「安全でないインライン」を適用すると、CSPは多かれ少なかれ無意味になりますか? SPAでCSPを処理する方法について何か良いアイデアはありますか?
「安全でないインライン」を適用すると、CSPは多かれ少なかれ無意味になりますか?
XSSの防止は、CSPの主な利点の1つです。インラインスクリプトを許可する必要がある場合、その利点はほとんどなくなります。
しかし、CSPが問題の悪用を防ぐことができる状況がまだいくつかあります。例:
SPAでCSPを処理する方法について何か良いアイデアはありますか?
他のアプリケーションと同じ方法:インラインスクリプトはありません。代わりに、すべてのスクリプトを.js
ファイル。これは、信頼できるOriginからインクルードします(これは実際には、インラインJavaScriptを持つ可能性のある従来のアプリケーションと比較して、SPAで実現するのが簡単ようです)あらゆる所に)。
特定のスクリプトブロックを許可する nonceまたはハッシュソースを使用することもできます(正しく実装されているため、XSSは正しく防止されます)。
現時点で安全でないインラインを許可する必要がある場合でも、状況に応じてできるだけ制限の厳しいCSPを実装することをお勧めします。
制限付きのCSPと互換性のある方法で将来の機能を実装するのに役立ちます。また、インラインjsの削除に取り掛かったときは、(新しいCSPの実装に関して複数の問題が発生する代わりに)既に配置されているCSPからunsafe-inlineを削除する必要があります。
私はこれをかなり読み回しましたが、 'unsafe-inline'を適用する必要がある場合、CSPヘッダーは実際にはあまり効果がないことを示すたくさんのコメントを見つけました。 「安全でないインライン」を適用すると、CSPは多かれ少なかれ無意味になりますか?
確かに、インラインスタイルとインラインスクリプトを禁止することは、CSPが提供する最大のセキュリティ強化の1つです。ただし、どうしても使用する必要がある場合は、それらを許可するメカニズムがいくつかあります。 nonce-sourceを使用して、特定のインラインスクリプトブロックのみを許可できます。
Content-Security-Policy: script-src 'nonce-2726c7f26c'
要素に同じノンスを設定する必要があります:
<script nonce="2726c7f26c">
var inline = 1;
</script>
SPAでCSPを処理する方法について何か良いアイデアはありますか?
うまくいけば、これが役立つ(xxをttに変更する):hxxps ://developer.squareup.com/blog/content-security-policy-for-single-page-web-apps/
クレジット: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
はい、とにかくCSPを設定する価値があります。ここにいくつかの利点があります:
frame-ancestors
ディレクティブを使用すると、クリックジャッキングを防ぐことができます。object-src
など、設定する必要のある他の便利なものがあります。 [〜#〜] mdn [〜#〜] には、Niceリストがあります。しかし、最大の利点はunsafe-inline
をブロックできることです。これは、多くの作業をせずにVue.JSで実現できると思います。
したがって、unsafe-inline
を取り除く方法を見つけることができれば、それは良いことです。しかし、何かがまだ何もないよりはましです。