From d82cc08734552f75e7c1b5bd05b498dbb97072a4 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 22 May 2018 08:41:13 +0100 Subject: [PATCH] Allow CSP to be put in enforcing mode --- config/example.application.yml | 2 + config/initializers/secure_headers.rb | 63 +++++++++++++++------------ 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/config/example.application.yml b/config/example.application.yml index 1e78084cc..b6884825b 100644 --- a/config/example.application.yml +++ b/config/example.application.yml @@ -120,6 +120,8 @@ defaults: &defaults #thunderforest_key: "" # Key for generating TOTP tokens #totp_key: "" + # Enforce Content-Security-Policy + csp_enforce: false # URL for reporting Content-Security-Policy violations #csp_report_url: "" diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb index cd6979bee..a320836c6 100644 --- a/config/initializers/secure_headers.rb +++ b/config/initializers/secure_headers.rb @@ -1,30 +1,27 @@ -if defined?(CSP_REPORT_URL) - csp_policy = { - :preserve_schemes => true, - :default_src => %w['self'], - :child_src => %w['self'], - :connect_src => %w['self'], - :font_src => %w['none'], - :form_action => %w['self'], - :frame_ancestors => %w['self'], - :frame_src => %w['self'], - :img_src => %w['self' data: www.gravatar.com *.wp.com *.tile.openstreetmap.org *.tile.thunderforest.com *.openstreetmap.fr], - :manifest_src => %w['none'], - :media_src => %w['none'], - :object_src => %w['self'], - :plugin_types => %w[], - :script_src => %w['self'], - :style_src => %w['self'], - :worker_src => %w['none'], - :report_uri => [CSP_REPORT_URL] - } +csp_policy = { + :preserve_schemes => true, + :default_src => %w['self'], + :child_src => %w['self'], + :connect_src => %w['self'], + :font_src => %w['none'], + :form_action => %w['self'], + :frame_ancestors => %w['self'], + :frame_src => %w['self'], + :img_src => %w['self' data: www.gravatar.com *.wp.com *.tile.openstreetmap.org *.tile.thunderforest.com *.openstreetmap.fr], + :manifest_src => %w['none'], + :media_src => %w['none'], + :object_src => %w['self'], + :plugin_types => %w[], + :script_src => %w['self'], + :style_src => %w['self'], + :worker_src => %w['none'], + :report_uri => [] +} - csp_policy[:connect_src] << PIWIK["location"] if defined?(PIWIK) - csp_policy[:img_src] << PIWIK["location"] if defined?(PIWIK) - csp_policy[:script_src] << PIWIK["location"] if defined?(PIWIK) -else - csp_policy = SecureHeaders::OPT_OUT -end +csp_policy[:connect_src] << PIWIK["location"] if defined?(PIWIK) +csp_policy[:img_src] << PIWIK["location"] if defined?(PIWIK) +csp_policy[:script_src] << PIWIK["location"] if defined?(PIWIK) +csp_policy[:report_uri] << CSP_REPORT_URL if defined?(CSP_REPORT_URL) cookie_policy = { :secure => SecureHeaders::OPT_OUT, @@ -33,7 +30,17 @@ cookie_policy = { SecureHeaders::Configuration.default do |config| config.hsts = SecureHeaders::OPT_OUT - config.csp = SecureHeaders::OPT_OUT - config.csp_report_only = csp_policy + + if CSP_ENFORCE + config.csp = csp_policy + config.csp_report_only = SecureHeaders::OPT_OUT + elsif defined?(CSP_REPORT_URL) + config.csp = SecureHeaders::OPT_OUT + config.csp_report_only = csp_policy + else + config.csp = SecureHeaders::OPT_OUT + config.csp_report_only = SecureHeaders::OPT_OUT + end + config.cookies = cookie_policy end -- 2.43.2