ฉันสามารถใช้ nonce เดียวกันสำหรับคำร้องขอหลาย ๆ อันในหน้าเดียวกันได้หรือไม่?


13

หรือนี่เป็นการทำลายจุดประสงค์ของความชั่วซึ่งฉันยอมรับว่าฉันไม่เข้าใจ :)

ตัวอย่างเช่นคำขอ ajax สองรายการที่เรียกใช้กับการโหลดหน้าเว็บหรือเมื่อมีการคลิกบางสิ่ง:

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

คำตอบ:


4

ฟังก์ชั่นการสร้าง WordPress nonceคือจะเรียกว่าเฉพาะในinitเบ็ด:

ใช้การเริ่มต้นหรือการกระทำใด ๆ ที่ตามมาเพื่อเรียกใช้ฟังก์ชันนี้ การโทรออกนอกการดำเนินการอาจทำให้เกิดปัญหาได้ ดูรายละเอียดที่# 14024

เนื่องจากinithook "ทำงานหลังจาก WordPress โหลดเสร็จแล้ว แต่ก่อนที่จะส่งส่วนหัวใด ๆ " จะมีการสร้าง nonces ในทุกคำขอแบบเต็มหน้า (ไม่ใช่คำขอ ajax) ดังนั้นในทางเทคนิคคุณสามารถใช้ nonce เดียวกันกับคำขอหลาย ๆ อันได้ แต่คุณควรทำให้มันไม่เหมือนใครในแต่ละคำขอเนื่องจากคำตอบอื่น ๆ ได้ชี้ให้เห็นแล้ว


หากต้องการเพิ่มความกระจ่างเกี่ยวกับค่า nonces:

Noncesจะถูกส่งในแต่ละคำขอ Ajax เป็นโทเค็นการรักษาความปลอดภัยเพื่อให้แน่ใจว่าคำขอนั้นมีวัตถุประสงค์โดยผู้ใช้


ข้อสรุปดังกล่าวดูเหมือนว่าจะขึ้นอยู่กับข้อสันนิษฐานที่ไม่ถูกต้องว่าแรงกระทำเป็นวิธีในการป้องกันการโจรกรรมข้อมูลส่วนตัว ดูwordpress.stackexchange.com/a/32361/205
scribu

@ Subsu ขอบคุณสำหรับความเข้าใจ ฉันแก้ไขคำตอบ
Naoise Golden

9

ใช่พลังความสับสนสูง :)

ในขณะที่แนวคิดของ nonce บอกเป็นนัยว่ามีการใช้เพียงครั้งเดียว WordPress ไม่บังคับใช้และในทางเทคนิคคุณสามารถใช้ nonce ได้หลายครั้ง

อย่างไรก็ตามเนื่องจาก nonce ใช้ในการตรวจสอบเจตนา (เช่นเดียวกับที่คุณหมายถึงการดำเนินการที่เฉพาะเจาะจง) - การกระทำที่แตกต่างกันควรมีการสร้างและตรวจสอบ nonces ที่แตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.