ContentSecurityPolicy(CSP)


はじめに

先日、仕事でセキュリティに関する内容の仕事をしていたがそれまでクリックジャックって〜フィシングサイトって〜みたいな概念的な物しか把握してなかったので調べました。
もっと具体的に〜があって、〜が問題でだからこの設定が必要である。
というもうちょっと掘り下げた内容を備忘録として残していきたいと思います。

ContentSecurityPolicy(CSP)って?

ドキュメントより
https://developer.mozilla.org/ja/docs/Web/HTTP/CSP

コンテンツセキュリティポリシー (CSP) は、クロスサイトスクリプティング (XSS) やデータインジェクション攻撃などのような、特定の種類の攻撃を検知し、影響を軽減するために追加できるセキュリティレイヤーです。これらの攻撃はデータの窃取からサイトの改ざん、マルウェアの拡散に至るまで、様々な目的に用いられます。

つまりやXSSという脆弱性があると悪意のあるユーザーによって仕込まれた任意のJavaScriptが実行できてしまい、データの窃盗や改竄などができてしまう。

XSSへの内容としては

CSP の第一の目的は XSS 攻撃の軽減と報告です。 XSS 攻撃とは、サーバーから取得したコンテンツをブラウザーが信頼する性質を悪用した攻撃です。ブラウザーはコンテンツの送信元を信頼するため、たとえ実際の送信元が見かけ上とは異なっていたとしても、悪意あるスクリプトが被害者のブラウザー上で実行されてしまいます。

サーバー管理者が CSP を利用する場合、実行を許可するスクリプトの正しいドメインをブラウザーに向けて指定することにより、 XSS の発生する箇所を削減・根絶することができます。 CSP をサポートするブラウザーは、サーバーから指定された許可リストに載っているドメインのスクリプトのみ実行し、他のスクリプトはすべて無視します (インラインスクリプトや HTML 属性値のイベントハンドラも無視する対象に含まれます)。

究極的な防衛策として、スクリプトを決して実行させたくないサイトは、スクリプトの実行を全面的に拒否することも可能です。

設定することでスクリプトの実行制限をかけたりホワイトリストにして限定的に許可したりできたり
するそうです。

パケットへの内容については

取得するコンテンツのドメインを制限することに加えて、サーバーは通信に使うプロトコルを指定することも可能です。例えば、 (セキュリティの観点からはこれが理想的ですが) すべてのコンテンツを HTTPS で取得されるようにサーバーから指定することが出来ます。データ通信におけるセキュリティ戦略を完全なものとするには、HTTPS 通信を強制するだけではなく、すべての Cookie に secure フラグ を付けたり、HTTP ページから対応する HTTPS ページへの自動リダイレクトを整備することも必要です。また、ブラウザーが暗号化された通信路のみを用いてサイトに接続することを保証するため、Strict-Transport-Security HTTP ヘッダーを利用することも可能です。

設定することで取得するコンテンツのドメインやプロトコルを制限することができるそうです

これによりどこらか、どこへかの制限ができる

設定のしかたについてはこちら
https://developers.google.com/web/fundamentals/security/csp/?hl=ja

ディレクティブの早見表を作ってくださったかたがいらっしゃるのでディレクティブな内容はそちらを参照
https://qiita.com/zabu/items/d2fbac1abc81eba38efb