Posso usare lo stesso nonce per più richieste sulla stessa pagina?


13

O questo infrange lo scopo del nonce, che ammetto di non aver capito bene? :)

Ad esempio su due richieste Ajax eseguite al caricamento della pagina o quando si fa clic su qualcosa:

 $.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; ?>' }
 });

Risposte:


4

La funzione di creazione nonce di WordPress deve essere chiamata solo initall'hook:

Utilizzare init o qualsiasi azione successiva per chiamare questa funzione. Chiamarlo al di fuori di un'azione può causare problemi. Vedi # 14024 per i dettagli.

Poiché l' inithook "viene eseguito dopo che WordPress ha terminato il caricamento ma prima che vengano inviate le intestazioni", vengono create nonces su ogni richiesta a pagina intera (non su richiesta Ajax). Quindi, tecnicamente, puoi usare lo stesso nonce su più richieste, ma dovresti renderle uniche su ogni richiesta , come hanno sottolineato altre risposte.


Per fare un po 'più di luce su cosa sono le nonci:

Le nonce vengono inviate su ogni richiesta Ajax come token di sicurezza, per garantire che la richiesta sia stata intesa dall'utente.


Tale conclusione sembra basarsi sul presupposto errato che i nonces siano un modo per prevenire il furto di identità. Vedi wordpress.stackexchange.com/a/32361/205
scribu il

@scribu grazie per la comprensione. Ho modificato la risposta.
Naoise Golden,

9

Sì, i nonces sono molto confusi. :)

Mentre il concetto di nonce implica che viene utilizzato solo una volta, WordPress non lo applica e tecnicamente è possibile utilizzare nonce più volte.

Tuttavia, poiché nonce viene utilizzato per verificare l'intento (come in realtà intendevi eseguire un'azione specifica) - diverse azioni dovrebbero avere diverse nonces generate e verificate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.