From 7ac4705567636302a5a6d91152025230c25eb6dc Mon Sep 17 00:00:00 2001 From: Bell Isabell Date: Tue, 3 Mar 2026 18:40:55 -0800 Subject: [PATCH] Enable Content Security Policy - Uncomment and configure CSP initializer - Allow Google Fonts for font sources - Use nonces for script sources (Turbo/Stimulus compatible) - Allow unsafe-inline for styles (needed for accent colors) - Allow common image sources including https, data, and blob - Allow tally.so for embedded forms - Set strict defaults: object-src none, base-uri self, form-action self Security: Closes #18 --- .../initializers/content_security_policy.rb | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index f37ed8d..5879d55 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -5,23 +5,29 @@ # For further information see the following documentation # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy -# Rails.application.configure do -# 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 -# # Specify URI for violation reports -# # policy.report_uri "/csp-violation-report-endpoint" -# end -# -# # Generate session nonces for permitted importmap and inline scripts -# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } -# config.content_security_policy_nonce_directives = %w(script-src) -# -# # Report CSP violations to a specified URI. See: -# # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only -# # config.content_security_policy_report_only = true -# end +Rails.application.configure do + config.content_security_policy do |policy| + policy.default_src :self + policy.font_src :self, "https://fonts.gstatic.com", :data + policy.img_src :self, :https, :data, :blob + policy.object_src :none + policy.script_src :self, :strict_dynamic + policy.style_src :self, "https://fonts.googleapis.com", :unsafe_inline + policy.connect_src :self, :https + policy.frame_src :self, "https://tally.so" + policy.base_uri :self + policy.form_action :self + + # Specify URI for violation reports + # policy.report_uri "/csp-violation-report-endpoint" + end + + # Generate session nonces for permitted importmap and inline scripts + # Required for Turbo/Stimulus and importmap-rails + config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } + config.content_security_policy_nonce_directives = %w[script-src] + + # Report CSP violations to a specified URI. See: + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only + # config.content_security_policy_report_only = true +end