fixup! fixup! fixup! fixup! fixup! [#8470] added default csp headers and configurable options to add additional frame-src and form-action
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index cd82678..4515532 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -471,17 +471,21 @@
report_uri = ''
report_suffix = ''
report_uri_enforce = ''
- if self.config['base_url'].startswith('https'):
- resp.headers.add('Content-Security-Policy', 'upgrade-insecure-requests')
if g.csp_report_mode and g.csp_report_uri:
report_suffix = '-Report-Only'
report_uri = f'; report-uri {g.csp_report_uri}; report-to {g.csp_report_uri}'
+ rules = resp.headers.getall(f'Content-Security-Policy{report_suffix}')
+ if rules:
+ resp.headers.pop(f'Content-Security-Policy{report_suffix}')
+ if self.config['base_url'].startswith('https'):
+ rules.append('upgrade-insecure-requests')
if g.csp_report_uri_enforce:
report_uri_enforce = f'; report-uri {g.csp_report_uri_enforce}; report-to {g.csp_report_uri_enforce:}'
if self.config.get('csp.frame_sources'):
- resp.headers.add(f'Content-Security-Policy{report_suffix}', f"frame-src {self.config['csp.frame_sources']}{report_uri}{report_uri_enforce}")
+ rules.append(f"frame-src {self.config['csp.frame_sources']}{report_uri}{report_uri_enforce}")
if self.config.get('csp.form_action_urls'):
- resp.headers.add(f'Content-Security-Policy{report_suffix}', f"form-action {self.config['csp.form_action_urls']}{report_uri}{report_uri_enforce}")
- resp.headers.add('Content-Security-Policy', "object-src 'none'")
- resp.headers.add('Content-Security-Policy', "frame-ancestors 'self'")
+ rules.append(f"form-action {self.config['csp.form_action_urls']}{report_uri}{report_uri_enforce}")
+ rules.append("object-src 'none'")
+ rules.append("frame-ancestors 'self'")
+ resp.headers.add(f'Content-Security-Policy{report_suffix}', '; '.join(rules))
return resp(environ, start_response)