今回は、Content Security Policy ( コンテンツセキュリティーポリシー ) の指定方法についてメモしたいと思います。
注意点
特に今回のメモは、設定方法に慣れていない筆者が、
個人的にコンテンツセキュリティポリシーの指定を考えるときの足掛かりとするための、
”メモ” 内容に過ぎませんので、その点についてはご了承ください。
誠に申し訳ございませんが、誤っている内容も含まれているかもしれません。
誤りがあれば、気付き次第、修正させて頂きます。
また、セキュリティを担保するには、他の要素も含めて設計する必要があるため、
CSP(コンテンツセキュリティーポリシー)を適用すれば、
セキュリティとして全ての問題が解決するという内容ではありません。
参考
・Content Security Policy (CSP) Quick Reference Guide
・Google Web Fundamentals コンテンツセキュリティーポリシー
CSP(コンテンツセキュリティーポリシー) 指定方法
metaタグ指定
metaタグで指定する場合、以下の要領で指定します。
ディレクティブとオリジンの組み合わせは、複数指定可能です。
<meta http-equiv="Content-Security-Policy"
content=" ディレクティブ 'オリジン' 'オリジン'; ディレクティブ 'オリジン' 'オリジン'; ...">
配下のドメインに配置されているリソースのみ読み込みに可能という指定をする場合には、以下のように指定します。
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
Refused to apply inline style because it violates the following Content Security Policy directive: "default-src 'self' localhost:8888". Either the 'unsafe-inline' keyword, a hash ('sha25647DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'style-src' was not explicitly set, so 'default-src' is used as a fallback.
こちらのエラーは、trix.jsというライブラリを読み込んで、CSPとして”default-src ‘self’ を指定した際のエラーです。
エラー内容としては、インラインコードを許可するか、
nonce指定のインラインスクリプト記述に変更してくださいという内容です。
- インラインコードを許可
default-src 'self' 'unsafe-inline'
- nonce指定のインラインスクリプト記述
<script nonce="XXXX">
Refused to load the image '<URL>' because it violates the following Content Security Policy directive: "img-src 'self' localhost:8888".
img-src 'self' data:
しかし、このアプローチをとると、
Data URIは、MIME Typeを自由に設定できるので、
data:text/html,<script>alert(‘do XSS script’);</script> などとされると実行されてしまいます。。。
できる限り、配下に画像を置いて読み込ませる必要があります。
サーバーconfing指定
サーバーによっては、confファイルでの指定可能です。
- Apache
Header set Content-Security-Policy "default-src 'self';"
- Nginx
Header set Content-Security-Policy "default-src 'self';"
- IIS
<system.webServer> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="default-src 'self';" /> </customHeaders> </httpProtocol> </system.webServer>
◎引用元:Content Security Policy (CSP) Quick Reference Guide Server Side Configuration
https://content-security-policy.com/
今回のメモは以上となります。
あまり、フリーのライブラリなどを使用していなければ、
Content Security Policyの指定をするのは、そこまで手間ではないと思います。
しかし、GoogleAnaliticsなど、
どうしてもインラインコード実行されてしまうものに関しては、
対応がかなり面倒になってしまうと思います。
普段以上に、個人的なメモ色のある内容になってしまい、
誠に申し訳ございませんが、よろしくお願い致します。