Content Security Policy コンテンツセキュリティーポリシー 指定

今回は、Content Security Policy ( コンテンツセキュリティーポリシー ) の指定方法についてメモしたいと思います。

注意点

特に今回のメモは、設定方法に慣れていない筆者が、

個人的にコンテンツセキュリティポリシーの指定を考えるときの足掛かりとするための、

”メモ” 内容に過ぎませんので、その点についてはご了承ください。

誠に申し訳ございませんが、誤っている内容も含まれているかもしれません。

誤りがあれば、気付き次第、修正させて頂きます。

 

また、セキュリティを担保するには、他の要素も含めて設計する必要があるため、

CSP(コンテンツセキュリティーポリシー)を適用すれば、

セキュリティとして全ての問題が解決するという内容ではありません。

 

参考

MDN コンテンツセキュリティーポリシー

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'">
たまにOSSライブラリを利用していると、
ライブラリ内部で外部のリソースを読み込み、インラインコード化して実行する処理が実は埋め込まれていて、
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">
尚、インラインコードを許可してしまうと、
外部読み込みできるjsファイルは制限できても、
悪意のあるコードをインラインコードで実行されてしまいますので、
極力インラインコードの許可は行うべきではありません。

 

ただ、インラインコードを禁止すると、
インライン実行されるOSSライブラリなどは、
インラインされる可能性のある部分を独自にjsファイル化する必要があったり、
かなり改修に手間がかかると思います、、、

 

また、別の内容になりますが、
ライブラリ内で、外部の画像などを読み込んでいたりすると、エラーが発生する場合もあります。
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など、

どうしてもインラインコード実行されてしまうものに関しては、

対応がかなり面倒になってしまうと思います。

普段以上に、個人的なメモ色のある内容になってしまい、

誠に申し訳ございませんが、よろしくお願い致します。

 

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 173

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る