Files
fizzy/config/initializers/content_security_policy.rb
T
Jeremy Daer 345f457513 Tune CSP for user extensions and close implicit-allow gaps (#1974)
Loosen font-src and add media-src to allow browser extensions like
accessibility fonts (OpenDyslexic) and user style managers to work
without CSP violations.

Add default-src and connect-src directives to close security gaps where
unspecified directives were implicitly allowing all sources.
2025-12-05 16:57:03 -08:00

38 lines
1.5 KiB
Ruby

# Be sure to restart your server when you modify this file.
# Define an application-wide Content Security Policy.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
Rails.application.configure do
# Configure from environment variables (fizzy-saas can override by setting config.x values first)
config.x.content_security_policy.report_uri ||= ENV["CSP_REPORT_URI"]
config.x.content_security_policy.report_only ||= ENV["CSP_REPORT_ONLY"] == "true"
# Generate nonces for importmap and inline scripts
config.content_security_policy_nonce_generator = ->(request) { SecureRandom.base64(16) }
config.content_security_policy_nonce_directives = %w[ script-src ]
config.content_security_policy do |policy|
policy.default_src :self
policy.script_src :self
policy.style_src :self, :unsafe_inline
policy.connect_src :self
policy.img_src :self, "blob:", "data:", "https:"
policy.font_src :self, "data:", "https:"
policy.media_src :self, "blob:", "data:", "https:"
policy.object_src :none
policy.base_uri :none
policy.form_action :self
policy.frame_ancestors :self
# Specify URI for violation reports (e.g., Sentry CSP endpoint)
if report_uri = config.x.content_security_policy.report_uri
policy.report_uri report_uri
end
end
# Report violations without enforcing the policy.
config.content_security_policy_report_only = config.x.content_security_policy.report_only
end unless ENV["DISABLE_CSP"]