web-dev-qa-db-ja.com

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

それともこれは一目瞭然の目的を壊しているのでしょうか、私はそれを理解できていません。 :)

たとえば、ページのロード時、または何かがクリックされたときに実行される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; ?>' }
 });
12
Alex

WordPressナンス生成関数init フックでのみ呼び出されます。

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

initフックは「WordPressのロードが完了した後、ヘッダーが送信される前に実行される」ため、(ajax要求ではなく)全ページ要求ごとにノンスが作成されます。したがって、技術的には、複数のリクエストで同じナンスを使用できますが、 他の回答で指摘されているように、各リクエストでそれらを一意にする必要があります


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

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

4
Naoise Golden

はい、ナンスは非常に混乱します。 :)

Nonceの概念はそれが一度だけ使われることを意味しますが、WordPressはそれを強制しません、そして技術的にあなたは何度もnonceを使うことができます。

ただし、ノンスは意図を検証するために使用されるので(実際には特定のアクションを実行することを意味していたように) - アクションごとに異なるナンスを生成してチェックする必要があります。

9
Rarst