Posso usar o mesmo nonce para várias solicitações na mesma página?


13

Ou isso quebra o propósito do nonce, que eu admito que não o entendo completamente? :)

Por exemplo, em duas solicitações ajax executadas no carregamento da página ou quando algo é clicado:

 $.ajax({
   type: 'post',
   url: 'admin-ajax.php',
   data: { action: 'foo',
           _ajax_nonce: '<?php echo $nonce; ?>' }
 });

 $.ajax({
   type: 'post',
   url: 'admin-ajax.php',
   data: { action: 'foo2',
           _ajax_nonce: '<?php echo $nonce; ?>' }
 });

Respostas:


4

A função de criação de nonce do WordPress deve ser chamada apenas no initgancho:

Use o init ou qualquer ação subsequente para chamar esta função. Chamar isso de fora de uma ação pode levar a problemas. Veja # 14024 para detalhes.

Como o initgancho "é executado após o carregamento do WordPress, mas antes do envio de qualquer cabeçalho", são criados nonces em todas as solicitações de página inteira (não ajax). Portanto, tecnicamente, você pode usar o mesmo nonce em várias solicitações, mas você deve torná-las únicas em cada solicitação , como outras respostas apontaram.


Para esclarecer um pouco mais o que são nonces:

Nonces são enviados em cada solicitação do Ajax como um token de segurança, para garantir que a solicitação foi planejada pelo usuário.


Essa conclusão parece basear-se na suposição incorreta de que os não-atos são uma maneira de impedir o roubo de identidade. Veja wordpress.stackexchange.com/a/32361/205
scribu

@scribu obrigado pela compreensão. Eu editei a resposta.
Naoise Golden

9

Sim, nonces são altamente confusos. :)

Embora o conceito de nonce implique que ele seja usado apenas uma vez, o WordPress não impõe isso e, tecnicamente, você pode usar o nonce várias vezes.

No entanto, como o nonce é usado para verificar a intenção (como você realmente pretendia executar uma ação específica) - ações diferentes devem ter diferentes nonces gerados e verificados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.