|
1 | 1 | # Be sure to restart your server when you modify this file. |
2 | 2 |
|
3 | | -# Define an application-wide content security policy. |
4 | | -# See the Securing Rails Applications Guide for more information: |
5 | | -# https://guides.rubyonrails.org/security.html#content-security-policy-header |
| 3 | +# Define an application-wide Content Security Policy. |
| 4 | +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy |
6 | 5 |
|
7 | | -# Rails.application.configure do |
8 | | -# config.content_security_policy do |policy| |
9 | | -# policy.default_src :self, :https |
10 | | -# policy.font_src :self, :https, :data |
11 | | -# policy.img_src :self, :https, :data |
12 | | -# policy.object_src :none |
13 | | -# policy.script_src :self, :https |
14 | | -# policy.style_src :self, :https |
15 | | -# # Specify URI for violation reports |
16 | | -# # policy.report_uri "/csp-violation-report-endpoint" |
17 | | -# end |
18 | | -# |
19 | | -# # Generate session nonces for permitted importmap, inline scripts, and inline styles. |
20 | | -# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } |
21 | | -# config.content_security_policy_nonce_directives = %w(script-src style-src) |
22 | | -# |
23 | | -# # Report violations without enforcing the policy. |
24 | | -# # config.content_security_policy_report_only = true |
25 | | -# end |
| 6 | +Rails.application.configure do |
| 7 | + # Configure from environment variables (fizzy-saas can override by setting config.x values first) |
| 8 | + config.x.content_security_policy.report_uri ||= ENV["CSP_REPORT_URI"] |
| 9 | + config.x.content_security_policy.report_only ||= ENV["CSP_REPORT_ONLY"] == "true" |
| 10 | + |
| 11 | + # Generate nonces for importmap and inline scripts |
| 12 | + config.content_security_policy_nonce_generator = ->(request) { SecureRandom.base64(16) } |
| 13 | + config.content_security_policy_nonce_directives = %w[ script-src ] |
| 14 | + |
| 15 | + config.content_security_policy do |policy| |
| 16 | + policy.script_src :self |
| 17 | + policy.style_src :self, :unsafe_inline |
| 18 | + policy.img_src :self, "blob:", "data:", "https:" |
| 19 | + policy.font_src :self |
| 20 | + policy.object_src :none |
| 21 | + |
| 22 | + policy.base_uri :none |
| 23 | + policy.form_action :self |
| 24 | + policy.frame_ancestors :self |
| 25 | + |
| 26 | + # Specify URI for violation reports (e.g., Sentry CSP endpoint) |
| 27 | + if report_uri = config.x.content_security_policy.report_uri |
| 28 | + policy.report_uri report_uri |
| 29 | + end |
| 30 | + end |
| 31 | + |
| 32 | + # Report violations without enforcing the policy. |
| 33 | + config.content_security_policy_report_only = config.x.content_security_policy.report_only |
| 34 | +end unless ENV["DISABLE_CSP"] |
0 commit comments