web-dev-qa-db-ja.com

期限切れのnonceの処理

ボタンがいくつかあるページがあります。人々がボタンをクリックすると、彼らはAJAXリクエストを発行し、ページの様々な部分を更新します。 AJAX要求はセキュリティ目的でnonceを利用します。

Nonceが期限切れになるまでに誰かがページを開いたままにしておくと、AJAXリクエストが期待どおりに機能しなくなることに気付きました。しかし、もう少し堅牢な振る舞いがほしいと思います。

私がやりたいことは - 一回だけが期限切れになったか失敗した時を検出し、そしてそれからどういうわけか新しい一回だけを生成することです。

つまり、これは2部構成の質問です。

  1. Nonceが期限切れになったことをどのようにして検出できますか?
  2. 期限切れのnonceで全ページをリフレッシュするのか、それ以外の方法を実行するのが最善でしょうか。私はセキュリティの問題にはあまり精通していません。ただし、ページの更新後は、現在のページステータス(つまり、さまざまなajaxで選択されたオプションのいずれかをページの一部を要求している)を引き継ぐ必要があります。
1
CHP

あなたのサイトがより安全になるところにそれを単に適用することによってNonceは魔法の弾丸ではありません。大まかに言って、nonceはログインしているユーザーにのみ適用され、ログインしていないユーザーに適用されてもほとんど役に立ちません。ログインしているユーザーでも、nonceが不要な場合があります。

....しかし、コーディング時には、ユーザーがログインしているかどうかを繰り返し確認するよりも、どこにでもナンスを適用する方が本当に簡単です。それでも、1日以上ページを開いたままにしておくことが重要です。そのすべての機能、それが行く方法です - それらが必要とされていないところのnonceを取り除きます。

あなたが説明するナンス問題は、定義が意味するようにWordPressがナンスを実装していないことの結果です。 WordPressは24時間それらを再利用しながら、ナンスはページロードごとに一意であることになっています。これはそれらをどこかに保存する必要性を排除するので大きな性能とアーキテクチャ上の利点を持ちますが、あなたが説明するもののような24時間毎のページの「強制」リロードに頼らずに排除するのが難しい問題を引き起こします。そのため、あなたの問題に対する他の解決策はあなた自身のロジックでnonce apiを上書きして一回限りのnonceを生成するか、あるいはログインしていないユーザに対して異なる時間間隔を使うことです。

なぜJSで有効期限を検出しないのですか?ナンスは秘密の "SALT"キーを使用して生成されるため、計算を再構築する唯一の方法はそれらをJSに公開することであり、その時点でそれらはもう秘密にはなりません。

0
Mark Kaplun