Content Security Policy (CSP) とは

KK
2024-03-12
2024-03-12

年三日坊主のKKです。

前回ご紹介したココイチ創業祭ですが、結局今年はグランド・マザー・カレーを29杯食べ、マット仕上げスプーンを2本当てましたが、マットとミラーの2種類をコンプリートすることは叶いませんでした。
「ミラー仕上げ2本あるから1本マット仕上げと交換しても良いよ」という方がいらっしゃいましたら、ご連絡頂けますと幸いです。


Webサイトのセキュリティ診断を受けられたお客様から
『「Content Security Policy (CSP) Missing (設定漏れ)」という指摘を受けたが何をどうすれば良いのかわからない』
というお問い合わせを受ける機会がありましたので、こちらでも説明させて頂きます。

さて、ご存じの方も多いかと思いますが、Webサイトというのは一般に一つのhtmlファイルではなく、画像ファイルやCSS、JavaScriptなど複数のファイルを組み合わせてできています。
そして、組み合わせるファイルは必ずしも呼び出し元のhtmlファイルと同じ場所(サーバ)に配置されているとは限りません。
たとえば、このエンジニアブログは https://blog.future.ad.jp/ という場所にホストされていますが、この一つの記事を表示するために以下のような場所からもCSSやjs、画像ファイルなどを読み込んでいます。

https://ajax.googleapis.com/
https://www.googletagmanager.com/
https://www.google-analytics.com/
https://track.hubspot.com/

しかしながら、もしクロスサイトスクリプティングなどによって、意図しないサイトからファイルを読み込んで誤った内容を表示させたり、マルウェアを閲覧者へ送り込もうとしたら問題です。

そこでサイト管理者がApacheやnginxなどのWebサーバーに「このコンテンツを表示するためには次のサイトからファイルを読み込みます」とファイルなどの読み込み元を指定しておくことで、指定外の場所からファイルを読み込ませようとした場合はブラウザが異常と見做して表示をブロックしたり、警告を表示したりできるようにする仕組み、それがCSPです。
なお、クロスサイトスクリプティングだけでなくクリックジャッキングなどの他の形式の攻撃に対する対策にもなるとされています。

CSPはHTTPヘッダーに設定しますので、ApacheやnginxなどのWeb(http)サーバーに必要事項を設定してやることで有効化することができます。
対象とするコンテンツの種別や読込を許可するドメインURL、プロトコル(httpsのみ)などが指定できますが、設定漏れや誤りが含まれるとサイトが正常に表示できなくなるためご注意ください。

参考:Content Security Policy (CSP) Quick Reference Guide