Follow-up de #76.
O #76 subiu uma CSP enforcing com hardening real (default-src 'self', object-src 'none', base-uri 'self', form-action, frame-ancestors), mas manteve 'unsafe-inline' e 'unsafe-eval' em script-src. Com isso a política não mitiga XSS refletido/armazenado: um script inline injetado ainda executa, e a allowlist de hosts pouco acrescenta.
Motivo: o payload de hidratação do TanStack Start é inline. Endurecer exige plumbar um nonce por request através do stream de SSR (@decocms/tanstack / @tanstack/react-start/server-entry) e aplicá-lo tanto nas tags de script emitidas quanto no header.
Escopo:
- gerar nonce por request no worker entry;
- injetar nas tags de script do SSR (inclui snippets inline do deco/Shopify);
- trocar
script-src 'self' 'unsafe-inline' 'unsafe-eval' ... por script-src 'self' 'nonce-<v>' 'strict-dynamic';
- remover
'unsafe-eval' (verificar se algo em dev/runtime depende disso);
- validar em preview antes do merge.
Até isso ser feito, a finding de CSP do diagnóstico está apenas parcialmente endereçada.
Follow-up de #76.
O #76 subiu uma CSP enforcing com hardening real (
default-src 'self',object-src 'none',base-uri 'self',form-action,frame-ancestors), mas manteve'unsafe-inline'e'unsafe-eval'emscript-src. Com isso a política não mitiga XSS refletido/armazenado: um script inline injetado ainda executa, e a allowlist de hosts pouco acrescenta.Motivo: o payload de hidratação do TanStack Start é inline. Endurecer exige plumbar um nonce por request através do stream de SSR (
@decocms/tanstack/@tanstack/react-start/server-entry) e aplicá-lo tanto nas tags de script emitidas quanto no header.Escopo:
script-src 'self' 'unsafe-inline' 'unsafe-eval' ...porscript-src 'self' 'nonce-<v>' 'strict-dynamic';'unsafe-eval'(verificar se algo em dev/runtime depende disso);Até isso ser feito, a finding de CSP do diagnóstico está apenas parcialmente endereçada.