Content Security Policy(コンテンツセキュリティーポリシー)
コンテンツセキュリティーポリシー、略してCSP。
Webサイトやアプリなどのコンテンツを保護するためのセキュリティの仕組み。
クロスサイトスクリプティングやデータインジェクション攻撃を検知し、影響を軽減できる。
CSPを有効にするにはサーバーが送信するHTTPレスポンスヘッダーに Content-Security-Policy: policy と設定すればOK
RailsのCSPの設定方法
RailsではCSPを設定するためのDSLが提供されている
コードは Rails セキュリティガイド - Railsガイド からの引用。
# config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy do |policy|
policy.default_src :self, :https
policy.font_src :self, :https, :data
policy.img_src :self, :https, :data
policy.object_src :none
policy.script_src :self, :https
policy.style_src :self, :https
# 違反レポートの送信先URIを指定する
policy.report_uri "/csp-violation-report-endpoint"
end
コントローラーでオーバーライドするコード例
# ポリシーをインラインでオーバーライドする場合
class PostsController < ApplicationController
content_security_policy do |policy|
policy.upgrade_insecure_requests true
end
end
# リテラル値を使う場合
class PostsController < ApplicationController
content_security_policy do |policy|
policy.base_uri "https://www.example.com"
end
end
# 静的値と動的値を両方使う場合
class PostsController < ApplicationController
content_security_policy do |policy|
policy.base_uri :self, -> { "https://#{current_user.domain}.example.com" }
end
end
# グローバルCSPをオフにする場合
class LegacyPagesController < ApplicationController
content_security_policy false, only: :index
end
また、 Content-Security-Policy ヘッダーの代わりに Content-Security-Policy-Report-Only ヘッダーを指定するとポリシーは適用せずに違反内容だけをレポートできる。
# config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy_report_only = true