Allow CSP to be put in enforcing mode
authorTom Hughes <tom@compton.nu>
Tue, 22 May 2018 07:41:13 +0000 (08:41 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 22 May 2018 07:51:21 +0000 (08:51 +0100)
config/example.application.yml
config/initializers/secure_headers.rb

index 1e78084cc0300c9a5976227158cc09c4a2717a5d..b6884825b5c68f137a368a16053f68300a692bf3 100644 (file)
@@ -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: ""
 
index cd6979bee26bf8e9c83e1dc31ae23d65d78b00fd..a320836c6eb2e056ce7143f6aead9e2dfad1616a 100644 (file)
@@ -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