Servir um verdadeiro nonce CSP por pedido com estrita dinâmica

Featurekamo-marketing
Shipped
20 de agosto de 2026 às 05:20 UTC
Author
Kamo
Commit
3271922

Limpa ambos os resultados elevados restantes no script-src: o 'inseguro-inline' um e "host allowlists pode frequentemente ser contornada". Só um nonce com 'strict-dynamic' limpa aqueles, e Next não pode fornecer um em um página pré-renderizada — um nonce deve ser único por resposta, então Next emite apenas uma durante a renderização, e uma rota pré-renderizada é servida a partir do cache de rota completa sem renderização. A solução documentada é fazer cada rota dinâmica, que iria desfazer a renderização estática deste site depende e colapso <Link> prefetch para uma árvore de rota nua. Assim, o nonce é aplicado onde os bytes deixam o processo. servidor-nonce.js inicia o servidor autônomo no loopback, serve o próprio porto público, e carimba cada Resposta HTML à saída. Em seguida, continua a render-se e continua a servir de sua cache própria; medida através do invólucro, /en/pricing ainda prefetches 77.521 bytes com 23 referências de blocos e respostas x-nextjs-cache: HIT. Tradução estática e um verdadeiro nonce rotativo, ambos. 'strict-dynamic' é o que retira o allowlist finding: navegadores ignoram host allowlists sob ele e scripts de confiança criados por scripts já confiáveis. A widget de bate-papo e o rastreador analítico são injetados pelo próximo / script em tempo de execução, então eles são confiáveis transitivamente e não precisam de entrada na lista de permissão. «inseguro» e https: permanece apenas como o backback documentado para navegadores muito antigos para entender Nonces, que ignoram e não recebiam nada antes. Três coisas que apareceram, nenhuma das quais teria sido visível a partir do configuração: · Encaminhar o pedido CSP upstream é uma armadilha. O próximo lê um nonce fora dele e carimba seus próprios scripts — então que renderiza vai para o cache de rota completa Com o nonce cozido dentro, então cada visitante posterior recebe 96 etiquetas carregando um morto Nonce. Em 'strict-dynamic' um nonce velho não degrada, bloqueia: a página em branco até a entrada expirar. O pedido CSP é despojado, e Qualquer atributo nonce pré-existente é removido antes de carimbar. · Reescrevendo o Host upstream para quebras loopback redirecionamentos. Compilações seguintes URLs de redirecionamento absoluto da máquina, então `/` respondeu «Localização: http://localhost:41337/pt». O Host é enviado sem alterações, e um redirecionamento apontando para o nosso próprio loopback é colapsado para um caminho como seguro. · A compressão teve que se mover. O Upstream é pedido para a identidade para que o HTML possa ser reescrito sem descomprimir/recomprimir viagem de ida e volta, e o invólucro re-compassos — brotli onde o cliente o leva, que é 30.177 bytes contra o 56.324 gzip servido antes. scripts/check-csp-nonce.mjs mantém o fim do contrato em cada compilação: boots o aplicativo construído por trás da embalagem e assevera que o cabeçalho carrega um nonce e 'strict-dynamic', que cada tag de script carrega um nonce, que todos eles são essa resposta, e que gira entre pedidos. Apanhou o "cached-nonce" erro na sua primeira execução. Um nonce fixo satisfaria a auditoria sendo legível por qualquer pessoa, então a verificação de rotação é o ponto em vez de uma formalidade. Pedido de memória 128Mi -> 256Mi: HTML é tamponado para ser carimbado, então a memória de pico agora escalas com solicitações HTML simultâneas em vez de sentar-se plana.

All changes

Como o que vês no transporte?

Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.

Começar Livre Para SempreVer Preços