diff --git a/.changeset/stupid-actors-look.md b/.changeset/stupid-actors-look.md new file mode 100644 index 000000000000..b31e235a49f8 --- /dev/null +++ b/.changeset/stupid-actors-look.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[fix] quote 'script' in CSP directives diff --git a/packages/kit/src/runtime/server/page/csp.js b/packages/kit/src/runtime/server/page/csp.js index 282369140e3c..f7b8eedd4e25 100644 --- a/packages/kit/src/runtime/server/page/csp.js +++ b/packages/kit/src/runtime/server/page/csp.js @@ -16,7 +16,8 @@ const quoted = new Set([ 'none', 'strict-dynamic', 'report-sample', - 'wasm-unsafe-eval' + 'wasm-unsafe-eval', + 'script' ]); const crypto_pattern = /^(nonce|sha\d\d\d)-/; diff --git a/packages/kit/test/apps/options/svelte.config.js b/packages/kit/test/apps/options/svelte.config.js index bae1cda492e7..b41b487d6576 100644 --- a/packages/kit/test/apps/options/svelte.config.js +++ b/packages/kit/test/apps/options/svelte.config.js @@ -5,7 +5,8 @@ const config = { embedded: true, csp: { directives: { - 'script-src': ['self'] + 'script-src': ['self'], + 'require-trusted-types-for': ['script'] } }, files: { diff --git a/packages/kit/test/apps/options/test/test.js b/packages/kit/test/apps/options/test/test.js index 588a7cbe558e..97fb3bc36b3d 100644 --- a/packages/kit/test/apps/options/test/test.js +++ b/packages/kit/test/apps/options/test/test.js @@ -124,6 +124,13 @@ test.describe('CSP', () => { await close(); }); + + test("quotes 'script'", async ({ page }) => { + const response = await page.goto(`/path-base`); + expect(response.headers()['content-security-policy']).toMatch( + /require-trusted-types-for 'script'/ + ); + }); }); test.describe('Custom extensions', () => {