This is an automated email from the ASF dual-hosted git repository.

gcruz pushed a commit to branch gc/8470
in repository https://gitbox.apache.org/repos/asf/allura.git


The following commit(s) were added to refs/heads/gc/8470 by this push:
     new 36d16891c fixup! fixup! fixup! fixup! fixup! [#8470] added default csp 
headers and configurable options to add additional frame-src and form-action
36d16891c is described below

commit 36d16891c751eed52c9d812bf0cfffc4fcb4b1ab
Author: Guillermo Cruz <[email protected]>
AuthorDate: Fri Oct 7 14:40:57 2022 -0600

    fixup! fixup! fixup! fixup! fixup! [#8470] added default csp headers and 
configurable options to add additional frame-src and form-action
---
 Allura/allura/lib/custom_middleware.py | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/Allura/allura/lib/custom_middleware.py 
b/Allura/allura/lib/custom_middleware.py
index cd8267836..451553229 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -471,17 +471,21 @@ class ContentSecurityPolicyMiddleware:
         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)

Reply via email to