¿Puedo usar el mismo nonce para múltiples solicitudes en la misma página?

13

¿O esto rompe el propósito del nonce, que administro no lo entiendo del todo? :)

Por ejemplo, en dos solicitudes ajax que se ejecutan al cargar la página, o cuando se hace clic en algo:

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

Respuestas:

4

La función de creación de WordPress nonce se debe llamar solo en el initgancho:

Use el init o cualquier acción posterior para llamar a esta función. Llamarlo fuera de una acción puede generar problemas. Ver # 14024 para más detalles.

Dado que el initenlace "se ejecuta después de que WordPress haya terminado de cargarse pero antes de que se envíen los encabezados", se crean nonces en cada solicitud de página completa (no solicitud ajax). Entonces, técnicamente, puede usar el mismo nonce en múltiples solicitudes, pero debe hacer que sean únicas en cada solicitud , como han señalado otras respuestas.


Para arrojar algo más de luz sobre lo que son ahora:

Nonces se envía en cada solicitud de Ajax como un token de seguridad, para garantizar que el usuario haya intentado la solicitud.

Naoise Golden
fuente
Esa conclusión parece estar basada en la suposición incorrecta de que ahora son una forma de prevenir el robo de identidad. Ver wordpress.stackexchange.com/a/32361/205
scribu
@scribu gracias por la información. Edité la respuesta.
Naoise Golden
9

Sí, ahora son muy confusos. :)

Si bien el concepto de nonce implica que solo se usa una vez, WordPress no lo aplica y técnicamente puede usar nonce varias veces.

Sin embargo, dado que nonce se usa para verificar la intención (como en realidad quería decir realizar una acción específica), diferentes acciones deberían tener diferentes nonces generados y verificados.

Rarst
fuente