同じページの複数のリクエストに同じナンスを使用できますか?


13

または、これはナンスの目的を壊しますか?:)

たとえば、ページの読み込み時に実行される2つの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のナンス作成機能はのみに呼び出されるinitフック:

initまたは後続のアクションを使用して、この関数を呼び出します。アクションの外部で呼び出すと、トラブルが発生する可能性があります。詳細については、#14024を参照してください。

以来initフックは、「ワードプレスは、完成ロードを持っていた後、実行されますが任意のヘッダが送信される前に」、ナンスは、すべてフルページ要求(ないAJAXリクエスト)上で作成されます。そのため、技術的には、複数のリクエストで同じノンスを使用できますが、他の回答が指摘しているようにノンスを一意にする必要があります


ノンスとは何かについてもう少し光を当てるには:

ノンスは、各Ajaxリクエストでセキュリティトークンとして送信され、リクエストがユーザーによって意図されたものであることを確認します。


この結論は、ナンスが個人情報の盗難を防ぐ方法であるという誤った仮定に基づいているようです。参照してくださいwordpress.stackexchange.com/a/32361/205
scribu

@scribu洞察に感謝します。答えを編集しました。
ネイスゴールデン

9

はい、ノンスは非常に紛らわしいです。:)

ノンスの概念は1回しか使用されないことを意味しますが、WordPressはそれを強制せず、技術的にはノンスを複数回使用できます。

ただし、意図を確認するためにnonceが使用されるため(実際に特定のアクションを実行するつもりだったように)-アクションごとに異なるnonceを生成してチェックする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.