Skip to content

Commit d081308

Browse files
committed
Upgrade secure headers modules
Signed-off-by: Patrik Dufresne <patrik@ikus-soft.com>
1 parent d58d740 commit d081308

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

rdiffweb/controller/tests/test_secure_headers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def test_content_security_policy(self):
171171
self.assertStatus(200)
172172
self.assertHeaderItemValue(
173173
'Content-Security-Policy',
174-
"default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:;",
174+
"default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:",
175175
)
176176

177177
def test_strict_transport_security(self):

rdiffweb/rdw_app.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,12 @@ def default(o):
110110
@cherrypy.tools.enrich_session()
111111
@cherrypy.tools.proxy(local=None, remote='X-Real-IP')
112112
@cherrypy.tools.secure_headers(
113-
csp="default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:;"
113+
csp={
114+
"default-src": "'self'",
115+
"style-src": ("'self'", "'unsafe-inline'"),
116+
"script-src": ("'self'", "'unsafe-inline'"),
117+
"img-src": ("'self'", "data:"),
118+
}
114119
)
115120
class Root(LocationsPage):
116121
def __init__(self):

rdiffweb/tools/secure_headers.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
# Define the logger
2323
logger = logging.getLogger(__name__)
2424

25+
DEFAULT_CSP = {
26+
'default-src': 'self',
27+
'style-src': ('self', 'unsafe-inline'),
28+
'script-src': ('self' 'unsafe-inline'),
29+
}
30+
2531
#
2632
# Patch Morsel prior to 3.8
2733
# Allow SameSite attribute to be define on the cookie.
@@ -30,13 +36,22 @@
3036
http.cookies.Morsel._reserved['samesite'] = 'SameSite'
3137

3238

39+
def _build_csp(csp):
40+
if isinstance(csp, dict):
41+
return "; ".join(
42+
f"{directive} {' '.join(sources) if isinstance(sources, (list,tuple)) else str(sources)}"
43+
for directive, sources in csp.items()
44+
)
45+
return str(csp)
46+
47+
3348
def set_headers(
3449
xfo='DENY',
3550
no_cache=True,
3651
referrer='same-origin',
3752
nosniff=True,
3853
xxp='1; mode=block',
39-
csp="default-src 'self'",
54+
csp=DEFAULT_CSP,
4055
):
4156
"""
4257
This tool provide CSRF mitigation.
@@ -98,7 +113,7 @@ def set_headers(
98113

99114
# Add Content-Security-Policy
100115
if csp:
101-
response.headers['Content-Security-Policy'] = csp
116+
response.headers['Content-Security-Policy'] = _build_csp(csp)
102117

103118
# Add Strict-Transport-Security to force https use.
104119
if https:

0 commit comments

Comments
 (0)