Tôi có thể sử dụng cùng một nonce cho nhiều yêu cầu trên cùng một trang không?


13

Hay điều này phá vỡ mục đích của nonce, điều mà tôi thừa nhận tôi không hiểu lắm về nó? :)

Ví dụ: trên hai yêu cầu ajax chạy trên tải trang hoặc khi nhấp vào cái gì đó:

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

Câu trả lời:


4

Các chức năng WordPress tạo nonce là để được gọi là chỉ trên initmóc:

Sử dụng init hoặc bất kỳ hành động tiếp theo nào để gọi hàm này. Gọi nó bên ngoài một hành động có thể dẫn đến rắc rối. Xem # 14024 để biết chi tiết.

inithook "chạy sau khi WordPress tải xong nhưng trước khi bất kỳ tiêu đề nào được gửi", nonces được tạo trên mỗi yêu cầu toàn trang (không phải yêu cầu ajax). Vì vậy, về mặt kỹ thuật, bạn có thể sử dụng cùng một nonce cho nhiều yêu cầu, nhưng bạn nên làm cho chúng là duy nhất cho mỗi yêu cầu , như các câu trả lời khác đã chỉ ra.


Để làm sáng tỏ thêm về những gì nonces là:

Nonces được gửi trên mỗi yêu cầu Ajax dưới dạng mã thông báo bảo mật, để đảm bảo yêu cầu được người dùng nhắm đến.


Kết luận đó dường như được dựa trên giả định không chính xác rằng nonces là một cách để ngăn chặn hành vi trộm cắp danh tính. Xem wordpress.stackexchange.com/a/32361/205
scribu

@ fouu cảm ơn vì sự sáng suốt. Tôi chỉnh sửa câu trả lời.
Naoise Golden

9

Vâng, nonces rất khó hiểu. :)

Mặc dù khái niệm nonce ngụ ý rằng nó chỉ được sử dụng một lần, nhưng WordPress không thực thi điều đó và về mặt kỹ thuật bạn có thể sử dụng nonce nhiều lần.

Tuy nhiên, vì nonce được sử dụng để xác minh ý định (như bạn thực sự muốn thực hiện hành động cụ thể) - các hành động khác nhau nên có các lực lượng khác nhau được tạo và kiểm tra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.