Puis-je utiliser le même nonce pour plusieurs demandes sur la même page?


13

Ou est-ce que cela brise le but du nonce, que j'avoue que je ne le comprends pas tout à fait? :)

Par exemple, sur deux requêtes ajax qui s'exécutent au chargement de la page, ou lorsque vous cliquez sur quelque chose:

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

Réponses:


4

La fonction de création de nonce WordPress doit être appelée uniquement sur le initcrochet:

Utilisez l'init ou toute action ultérieure pour appeler cette fonction. L'appeler en dehors d'une action peut entraîner des problèmes. Voir # 14024 pour plus de détails.

Puisque le inithook "s'exécute après que WordPress a fini de charger mais avant d'envoyer des en-têtes", des nonces sont créés à chaque demande de page entière (pas de demande ajax). Donc, techniquement, vous pouvez utiliser le même nonce sur plusieurs demandes, mais vous devez les rendre uniques sur chaque demande , comme d'autres réponses l'ont souligné.


Pour faire la lumière sur ce que sont les nonces:

Des nonces sont envoyés sur chaque demande Ajax en tant que jeton de sécurité, pour garantir que la demande était destinée à l'utilisateur.


Cette conclusion semble reposer sur l'hypothèse erronée que les nonces sont un moyen de prévenir le vol d'identité. Voir wordpress.stackexchange.com/a/32361/205
scribu

@scribu merci pour la perspicacité. J'ai édité la réponse.
Naoise Golden

9

Oui, les nonces sont très déroutants. :)

Alors que le concept de nonce implique qu'il n'est utilisé qu'une seule fois, WordPress ne l'impose pas et techniquement, vous pouvez utiliser plusieurs fois nonce.

Cependant, puisque nonce est utilisé pour vérifier l'intention (comme vous vouliez vraiment effectuer une action spécifique) - différentes actions doivent avoir des nonces différents générés et vérifiés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.