web-dev-qa-db-fra.com

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

Ou bien cela brise-t-il le but du nonce, que je reconnais ne pas bien comprendre? :)

Par exemple, sur deux demandes ajax qui s'exécutent au chargement de la page ou lorsque vous cliquez sur un élément:

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

La fonction de création de WordPress nonce ne doit être appelée que sur le hook init :

Utilisez 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.

Étant donné que le hook init "est exécuté après le chargement de WordPress, mais avant l’envoi des en-têtes", des nonces sont créés à chaque demande de page entière (et non à une demande ajax). Donc, techniquement, vous pouvez utiliser le même nonce sur plusieurs requêtes, mais vous devez les rendre uniques à chaque requête , comme d'autres réponses l'ont souligné.


Pour éclairer un peu plus ce que sont les nonces:

Des nonces sont envoyées sur chaque requête Ajax sous la forme d'un jeton de sécurité, afin de garantir que la requête était destinée à l'utilisateur. utilisateur.

4
Naoise Golden

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

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

Cependant, étant donné que nonce est utilisé pour vérifier l'intention (comme dans le cas où vous vouliez vraiment effectuer une action spécifique), différentes actions doivent avoir différents nonces générés et vérifiés.

9
Rarst