Skip to content

Commit 91a5385

Browse files
authored
[fix] quote script in CSP directives (#8372)
fixes #7442
1 parent e1beb92 commit 91a5385

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

.changeset/stupid-actors-look.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] quote 'script' in CSP directives

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const quoted = new Set([
1616
'none',
1717
'strict-dynamic',
1818
'report-sample',
19-
'wasm-unsafe-eval'
19+
'wasm-unsafe-eval',
20+
'script'
2021
]);
2122

2223
const crypto_pattern = /^(nonce|sha\d\d\d)-/;

packages/kit/test/apps/options/svelte.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ const config = {
55
embedded: true,
66
csp: {
77
directives: {
8-
'script-src': ['self']
8+
'script-src': ['self'],
9+
'require-trusted-types-for': ['script']
910
}
1011
},
1112
files: {

packages/kit/test/apps/options/test/test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,13 @@ test.describe('CSP', () => {
124124

125125
await close();
126126
});
127+
128+
test("quotes 'script'", async ({ page }) => {
129+
const response = await page.goto(`/path-base`);
130+
expect(response.headers()['content-security-policy']).toMatch(
131+
/require-trusted-types-for 'script'/
132+
);
133+
});
127134
});
128135

129136
test.describe('Custom extensions', () => {

0 commit comments

Comments
 (0)