Q&A
前提
WordPressでAjaxを使ったアクションを実装しています
知りたいこと
nonceの理解を深めたいです
特に「なぜ複数必要とされるのか?」が理解できないので教えて頂けませんでしょうか
以下に複数必要との記載があるソースを列挙してまいります
複数必要との記載があるソース1
まず関数リファレンスですが、
一般的に、アクションに対する名前を可能な限りユニークにするのがベストです。
https://wpdocs.osdn.jp/関数リファレンス/wp_create_nonce
とあり、その理由は明記されていません
複数必要との記載があるソース2
そして類似質問がありましたが、
アクション毎に nonce を別々にするのが望ましいです。
https://ja.wordpress.org/support/topic/「nonce」の使い方について/
とあり、やはり理由が不明です
複数必要との記載があるソース3
またはStackoverflowにも質問がありましたが、
Each form should have its own nonce
https://stackoverflow.com/questions/31987963/should-i-use-different-nonces-for-multiple-forms-on-same-page
その理由がここでもわかりません
役割を調べました
複数必要であるというその理由を知るために、公式マニュアルで本来の役割を見てみました
この「Why use a nonce?」の項目を見ると、予想通りnonceがCSRF対策だとわかります
https://codex.wordpress.org/WordPress_Nonces#Why_use_a_nonce.3F
CSRF対策ならば、nonceは「なぜ複数必要とされるのか?」が結局ナゾです。
普通に1つのトークンをフォームに持たせておけば対策は充分に可能だと思うのですが…?
まとめ
疑問は次の点にまとめられると思います
・nonceにはCSRF対策以外の役割があって、そのときに複数必要なのでしょうか?
・それともCSRF対策のトークンが複数必要なケースというのがあるのでしょうか?
宜しくお願い致します
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。