March 14, 2018

RailsでContent Security Policy (CSP)導入する

Railsアプリでのクロスサイトスクリプティング(XSS)の対策としては、コンテンツセキュリティポリシー(CSP)を設定、導入するのが一番効果的だ。

CSPは、Webアプリケーションのクライアントサイドが読み込むリソース (JavaScript、CSS、Imgなど)のホワイトリストを作成できる値の設定であり、設定することで悪意ある攻撃者によって予期しないリソースを読み込まされることを防ぐ。

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com

このCSPヘッダーにより、Webブラウザに対して自身のドメインと指定したドメイン(www.google-analytics.com)だけのリソースとJavaScriptコードを読み込むように設定できる。CSPについての詳細はhttps://content-security-policy.comを参照すると良い。

RailsアプリにContent Security Policyを簡単に導入する方法

CSPヘッダーを追加するには、 新ヘッダーを追加するBase Controllerの after_actionをincludeするだけで良い 例:

class ApplicationController < ActionController::Base
  after_action :set_csp_header

  def set_csp_header
      response.set_header("Content-Security-Policy", "default-src 'self'; script-src 'self' https://www.google-analytics.com;")
  end
end

この呼び出されているcontrollerがBaseとしてApplicationControllerを持っていれさえすれば、これでCSPヘッダーを含めてレスポンスできる

gemあります

自分でマニュアルにCSPのreturnを追加することもできるが、それを代わりにしてくれるgemもある 一般的なのは Secure Headers gemで、標準的にconfigされたされたCSPと、他にも事前にconfigされたSecurity headersが使える

Content-Security-Policy: default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline' Strict-Transport-Security: max-age=631138519 X-Content-Type-Options: nosniff X-Download-Options: noopen X-Frame-Options: sameorigin X-Permitted-Cross-Domain-Policies: none X-Xss-Protection: 1; mode=block

もちろん全て調節可能で、gem自体はよくメンテナンス、更新されている。

CSPの管理はマニュアルで大変である

CSPの一つの問題は、ホワイトリストもメンテナンスをし続けなければならないことだ。

Railsアプリにサードパーティのものを入れるたびにホワイトリストの更新をし続けなければならない。

また、違反報告(レポート)などをキャッチするために、CSPにレポートできるエンドポイントを含めたいということと思う。ポリシー違反を大規模にモニタリングするのは難しい。なので、そのようなエンドポイントを作るのは簡単ではない。

Content-Security-Policy: default-src 'self'; report-uri https://log.templarbit.com/csp-reports/06edfbca

■ Templarbit (テンプラービット) がCSO導入に役に立つ理由■

Templarbit (テンプラービット) 社では、中小企業や大企業のWebアプリケーションを悪意のあるサイバー攻撃から保護する、開発者向けのセキュリティプラットフォームを開発しています。 一つの機能としてCSPヘッダーを設定できるXSS対策があります。あなたのRubyのWebアプリケーションにコンテンツセキュリティポリシーを素早く導入し、管理が可能となります。また、コードをプッシュすることなく、コンテンツセキュリティポリシーがリアルタイムでアップデートされ、管理が手軽になります。 このTemplarbitの手軽さは、独自で持つデータと、機械学習モデルを活用することで、人に頼らずに自動的にセキュリティポリシーの更新が可能だからこそ実現されています。 コンテンツセキュリティポリシーの導入を始めたい方は、ぜひこちらからフリートライアルにサインアップして下さい!