diff --git a/packages/api/src/security/csp.spec.ts b/packages/api/src/security/csp.spec.ts index 6a408e5d4f..0c30bdd4ae 100644 --- a/packages/api/src/security/csp.spec.ts +++ b/packages/api/src/security/csp.spec.ts @@ -93,6 +93,13 @@ describe('policy directives', () => { expect(header).toContain("frame-ancestors 'self' https://portal.example.com"); }); + it("replaces rather than merges frame-ancestors, so 'none' is not diluted by 'self'", () => { + const header = headerFor({ CSP_FRAME_ANCESTORS: "'none'" }); + + expect(header).toContain("frame-ancestors 'none'"); + expect(header).not.toContain("frame-ancestors 'self'"); + }); + it('appends additional directives and skips malformed ones', () => { const header = serializeCspDirectives( buildCspDirectives({ diff --git a/packages/api/src/security/csp.ts b/packages/api/src/security/csp.ts index eb4ee78b6e..a00ecd4a76 100644 --- a/packages/api/src/security/csp.ts +++ b/packages/api/src/security/csp.ts @@ -76,7 +76,7 @@ function scriptSources(scriptExtras: string[]): string[] { * `'unsafe-inline'`, which would block every `