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

12

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

Por exemplo, em dois pedidos de ajax que são executados 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; ?>' }
 });
    
por Alex 27.12.2011 / 17:38

2 respostas

4

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

  

Use o init ou qualquer ação subseqüente para chamar essa função. Chamando   isto fora de uma ação pode levar a problemas. Veja # 14024 para detalhes.

Como o init hook "é executado após o término do carregamento do WordPress, mas antes que os cabeçalhos sejam enviados", os nonces são criados em todas as solicitações de página inteira (não na solicitação ajax). Então, 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 mais sobre o que são as coisas:

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

    
por Naoise Golden 27.12.2011 / 19:00
9

Sim, nonces são altamente confusos. :)

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

No entanto, uma vez que nonce é usado para verificar a intenção (como você realmente quis fazer uma ação específica) - diferentes ações devem ter diferentes nonces geradas e verificadas.

    
por Rarst 27.12.2011 / 19:22

Tags