認証にCookieを使用することについて読んでいます。Cookie はブラウザーのキャッシュから盗まれたり、HTTP メッセージで傍受されたりする可能性があるため、これは難しいようです。
そのためにノンスを使用するという考えに至りました。誰かがそれを盗むので、私はそれが好きです。実際のユーザーが WebApp に再度アクセスしようとするとすぐにアクセスできなくなります。そして、それを盗み続けるには、彼はユーザーの近くにいる必要があります.
しかし、適切なアルゴリズムを見つけることができません。Wordpress の nonce 実装は user_id を使用し、認証 Cookie ジェネレーターはちょっと複雑です (読み続けますが、もっと簡単に実装したかったのです)。
これらは私が強制的に使用している制約です:
- DB や HD に書き込む必要はありません。その複雑さに見合わないからです。
- つまり、サーバーはいかなる種類のデータも保存してはならず、すべてのデータ (ログインとノンス) を Cookie 経由でクライアントに送信する必要があり、クライアントはその Cookie データを送り返す必要があります。
- 「login|nonce」のように、Cookie にログインを追加しても問題ありません。したがって、Cookie を受け取ったときに、ログインと nonce のサブストリングを作成して確認できます。
- PHP と Java サーブレットで実装する必要があります。どちらかのコア機能を使用する場合、その機能をもう一方に実装するか、代替品を見つける必要がありますが、交換可能である必要はありません
- これは nonce であるため、HTTP 応答ごとに新しい nonce を生成します。これは 1 回だけ有効で、再度使用しようとすると無効になります
- ナンスを次のリクエストでのみ使用できればいいのですが、このナンスをどこかに保存して比較のために取得する必要があると思います。ステートレスを破る価値はないと思います。 limit で十分かもしれません (time limit は
time() / ( $nonce_life / 2 )
nonce のパラメーターの 1 つとして使用することを意味するため、その時間内にのみ使用できます
アイデアは、誰がログインしているかを知るためのステートレスで Cookie のみの方法を持つことです。
Wordpress でわかるように、ナンスが一度しか使用されていないことを知る方法は実際にはありません。ナンスが行うすべての検証は、有効期間中に使用されているかどうかです。したがって、$nonce_life が 1 日であれば、Wordpress のノンスはその日の間無制限に使用できます。それはリスクが高いと思います。ナンスを HD ファイルに保存し、ステートレスを破る方がよいかもしれませんが、ナンスは 1 回だけ使用するようにしてください。単純な rand() を使用して作成できます。