O nonceatributo permite que você “coloque na lista branca” certos elementos scripte inline style, evitando o uso da unsafe-inlinediretiva CSP (o que permitiria todos os inline script/ style), para que você ainda mantenha o recurso principal do CSP de não permitir inline script/ styleem geral.
Portanto, o nonceatributo é uma maneira de informar aos navegadores que o conteúdo embutido de um script ou elemento de estilo específico não foram injetados no documento por terceiros (maliciosos), mas foram inseridos no documento intencionalmente por quem controla o servidor em que o documento é veiculado de.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it fornece um bom exemplo de como usar o nonceatributo, que corresponde às seguintes etapas:
Para cada solicitação que o servidor da Web recebe para um documento específico, seu back-end gera uma sequência aleatória codificada em 64 de base de pelo menos 128 bits de dados de um gerador de números aleatórios criptograficamente seguro; por exemplo EDNnf03nceIOfn39fn3e9h3sdfa,. Essa é a sua falta.
Pegue o nonce gerado na etapa 1 e, para qualquer inline script/ que stylevocê queira "colocar na lista de permissões", faça com que seu código de back-end insira um nonceatributo no documento antes de ser enviado por fio, com esse nonce como valor:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Pegue o nonce gerado na etapa 1, adicione nonce--o previamente e faça seu back-end gerar um cabeçalho CSP com os valores da lista de fontes para script-srcou style-src:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Portanto, o mecanismo de uso de um nonce é uma alternativa para que seu back-end gere um hash do conteúdo do inline scriptou stylevocê deseja permitir e especifique esse hash na lista de fontes apropriada no cabeçalho do CSP.
Observe que, como os navegadores não (não podem) verificar se o valor de nonce enviado é alterado entre as solicitações de página, é possível, embora totalmente desaconselhável, pular 1 acima e não fazer com que seu back-end faça algo dinamicamente para o nonce. Nesse caso, você poderia simplesmente colocar um nonceatributo com um valor estático na fonte HTML do seu documento e enviar um cabeçalho estático do CSP com o mesmo valor nonce.
Mas o motivo pelo qual você não gostaria de usar um nonce estático dessa maneira é derrotar todo o propósito de usá-lo para começar - porque, se você usasse um nonce estático como esse, Nesse ponto, você também pode estar usando unsafe-inline.