Skip to content

Commit 5596ee0

Browse files
fix: skip CSP nonce in style-src when using unsafe-inline (#11575)
* CSP skips nonce in style-src when using unsafe-inline * Update .changeset/ninety-clouds-love.md --------- Co-authored-by: Rich Harris <[email protected]> Co-authored-by: Rich Harris <[email protected]>
1 parent 511367f commit 5596ee0

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

.changeset/ninety-clouds-love.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@sveltejs/kit": patch
3+
---
4+
5+
fix: only add nonce to `style-src` CSP directive when `unsafe-inline` is not present

packages/kit/src/runtime/server/page/csp.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class BaseProvider {
194194
this.#style_src_elem.push(`sha256-${hash}`);
195195
}
196196
} else {
197-
if (this.#style_src.length === 0) {
197+
if (this.#style_src.length === 0 && !d['style-src']?.includes('unsafe-inline')) {
198198
this.#style_src.push(`nonce-${this.#nonce}`);
199199
}
200200
if (d['style-src-attr']?.length) {

packages/kit/src/runtime/server/page/csp.spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,32 @@ test('skips nonce with unsafe-inline', () => {
102102
assert.equal(csp.report_only_provider.get_header(), "default-src 'unsafe-inline'; report-uri /");
103103
});
104104

105+
test('skips nonce in style-src when using unsafe-inline', () => {
106+
const csp = new Csp(
107+
{
108+
mode: 'nonce',
109+
directives: {
110+
'style-src': ['self', 'unsafe-inline']
111+
},
112+
reportOnly: {
113+
'style-src': ['self', 'unsafe-inline'],
114+
'report-uri': ['/']
115+
}
116+
},
117+
{
118+
prerender: false
119+
}
120+
);
121+
122+
csp.add_style('');
123+
124+
assert.equal(csp.csp_provider.get_header(), "style-src 'self' 'unsafe-inline'");
125+
assert.equal(
126+
csp.report_only_provider.get_header(),
127+
"style-src 'self' 'unsafe-inline'; report-uri /"
128+
);
129+
});
130+
105131
test('skips hash with unsafe-inline', () => {
106132
const csp = new Csp(
107133
{

0 commit comments

Comments
 (0)