3

ウィザードの手順を検証して次々とセキュリティを確保するためにナンスを生成しています。

nodejsでノンスを作成し、同じものをデータベースに保存して、一度使用できるようにする方法を知っています。

しかし、上記のようにノンスを生成して検証し、一度だけ使用し、可能であれば、データベースに同じものを保存せずに制限時間 (有効期限) 内に使用できるかどうか疑問に思っていました。ウィザードの 1 つのステップでクライアントを検証し、次のステップで同じことを検証します。

私は通常、以下の方法を使用してノンスを生成し、正規化し、有効期限が切れるまでmongodbに保存して、mongodbが使用されていない場合は特定の時間後に削除するようにします。

var crypto = require('crypto');

crypto.randomBytes(32, function (err, bytes) {
   if (err) {
       next(err);
    } else {
       next(null, normalize(bytes));
    }
});

これよりもナンスを生成する適切な/最適化された方法と、データベース呼び出しなしで1回限りの使用と有効期限を処理する可能性があるかどうかを提案してください。

4

3 に答える 3

1

サーバー上のハッシュマップのようなものを使用してノンスを保存および取得し、時間を確認することで、データベースを呼び出さずに期限切れのノンスを取得することができます。セッション ID または静的ユーザー ID があれば、それが役立ちます。ただし、サーバーに nonce を生成、保持、フェッチ、および維持させるというこの考え方は、MongoDB などのテスト済みのソリューションと比較すると難しいようです。サービスに複数のサーバーがある場合に発生する別の問題があり、セッションの開始から終了までトラフィックの一貫性を維持する必要があります。ナンスに関する単一の信頼できる情報源としてデータベースを使用すると、それが修正されます。

ノード サーバーに nonce を保持する理由が速度/遅延のためである場合は、追加のテストとコードを実行する価値があります。その場合、ナンスのタイムアウトは、期限切れのものを定期的にスキャンして、高速検索を維持する必要があります。

于 2016-10-25T06:46:29.567 に答える