ブログ

日々の出来事

先日参加したa-blog cmsの日(a-blog cmsの勉強会)でコンテンツセキュリティポリシー(CSP)の話がありました。
とても参考になるものでしたのでブログに残しておこうと思います。

コンテンツセキュリティポリシーを簡単に説明すると、設定されたドメイン環境以外のデータは無視することで、未知なる脅威からサイトを守るというものです。改ざんにあった際にも、コンテンツセキュリティポリシーを設定しておく事で、外部ファイルが実行できず被害を最小限に食い止めることが可能かもしれません。

a-blog cmsでは、「private/config.system.yaml」に設定をすることで実装可能ということでした。

//デフォルトはoff
content_security_policy : off # default-src 'self'; script-src 'self' | off

例えば、サイトのドメインのみデータの実行が可能にするためには下記の様に設定します。

//すべてのコンテンツをサイト自身のドメイン (サブドメインを除く) から取得
content_security_policy : default-src 'self'

この場合、他サイトのデータは実行されなくなりますので、別のサーバに置かれているjsや画像などは全て無視されます。

読み込み先にドメインを設定すれば、サイトのドメインに加え指定されたドメインの画像やjsなども実行することが可能になります。

//コンテンツをサイト自身のドメインと設定されたドメイン(sample-hp.com)から取得
content_security_policy : default-src 'self' *.sample-hp.com

例ではサイトのドメインに加え、外部ドメイン(*.sample-hp.com)のデータが読み込める様になりました。

また、SSLを指定することで暗号化した通信のみを許可する事も出来るようです。

//コンテンツをサイト自身のドメインと設定されたドメイン(www.sample-hp.com)からSSLでのみ取得
content_security_policy : default-src 'self' https://www.sample-hp.com

細かい設定は要件に合わせて追加していく様で、「script-src」「style-src」「img-src」などで、読み込むファイルの種類ごとに指定をすることも出来ます。

ただし、今どきのサイトの多くがSNSや地図APIなど外部サイトの機能に依存しているので、すべて設定するのは結構大変かもしれません。また、jsのインライン記述には基本的には対応しておらず、どうしてもインラインで書かなくてはならない場合は、ハッシュをつけるなどで対応する様です。

実際の作業としては、まずサイトのドメインだけを許可し、あとはソースやコンソールなどで表示される情報を確認しながら、読み込み可能なドメインを追加していく感じになると思います。
細かく複数のファイルを読み込むものも多いので、それなりの工数はかかりそうな気がしますが、これでリスクを減らせて安心できるなら、頑張って実装するのも良いかもしれません。


ブログの記事一覧