Czy mogę użyć tej samej wartości jednorazowej dla wielu żądań na tej samej stronie?


13

Czy może to łamie cel nonce, co, przyznaję, nie do końca to rozumiem? :)

Na przykład dla dwóch żądań ajax, które są uruchamiane podczas ładowania strony lub gdy coś zostanie kliknięte:

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

Odpowiedzi:


4

Funkcja tworzenia nonce WordPress ma być wywoływana tylko na przechwytywaniu init:

Użyj init lub dowolnej późniejszej akcji, aby wywołać tę funkcję. Wywołanie go poza akcją może prowadzić do problemów. Szczegóły patrz # 14024 .

Ponieważ inithak „działa po zakończeniu ładowania WordPressa, ale przed wysłaniem jakichkolwiek nagłówków”, nonces są tworzone dla każdego żądania na całej stronie (nie dla żądania ajax). Tak więc technicznie możesz użyć tego samego nonce na wielu żądaniach, ale powinieneś uczynić je unikalnymi dla każdego żądania , jak wskazały inne odpowiedzi.


Aby rzucić więcej światła na to, czym są nonces:

W przypadku każdego żądania Ajax wysyłane są wartości jednorazowe jako token bezpieczeństwa, aby upewnić się, że żądanie było zamierzone przez użytkownika.


Wniosek ten wydaje się opierać na niewłaściwym założeniu, że nonces są sposobem zapobiegania kradzieży tożsamości. Zobacz wordpress.stackexchange.com/a/32361/205
scribu,

@scribu dzięki za wgląd. Zredagowałem odpowiedź.
Naoise Golden

9

Tak, nonces są bardzo mylące. :)

Podczas gdy koncepcja nonce sugeruje, że jest używana tylko raz, WordPress nie wymusza tego i technicznie możesz używać nonce wiele razy.

Ponieważ jednak nonce służy do weryfikacji zamiaru (tak jak naprawdę chciałeś wykonać określoną akcję) - różne akcje powinny mieć wygenerowane i sprawdzone różne wartości jednorazowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.