web-dev-qa-db-ja.com

ASP.NET-デフォルトのSecurityStamp検証間隔が30分に設定されているのはなぜですか?

現在ASP.NET Coreの認証メカニズムを研究していて、ASP.NET Standardからも知られているSecurityStamp機能に出くわしました。 here の回答から理解できることから、これは、アカウント構成(パスワードなど)で何かが変更されたときにすべてのアクティブなセッションからサインアウトを実行するために追加されました。

これは、パスワードが侵害され、攻撃者のセッションを無効にする必要がある場合に役立ちます。しかし、これが目的である場合、検証間隔のデフォルト値が30分に設定されているのはなぜですか?このような設定により、メカニズム全体が最大30分の遅延で動作します。これをより効果的にするために、これをより小さな値(1分としましょう)にすべきではありませんか?

4
PJDev

より大規模なアプリケーションのパフォーマンスを向上させるためです。

SecurityStampの検証ごとに、データベースヒットが必要です。検証間隔をゼロに設定すると、すべてのリクエストでデータベースヒットが発生します。 30分では、これにより、必要なクエリの数が大幅に削減されると同時に、不正使用のウィンドウがかなり低くなります。

実際に動作する例として、1分間に5つのリクエストしか行わない10,000人の同時ユーザーがいるシステムでは、間隔がゼロの場合、1分あたり50,000の検証ヒットが必要になります。その間隔を1分に変更すると、1分あたり10,000ヒットに減少します。間隔をデフォルトの30分のままにしておくと、レートが1分あたり333クエリに低下します。これは、どのような規模のアプリケーションでもパフォーマンスの問題の原因になる可能性は低いため、それがデフォルトである理由です。 Ajaxを多用するデザインの短い検証間隔で、ページの読み込みごとに10〜20回のWeb呼び出しを実行し、いくつかの継続的なクエリが繰り返されると、大規模な問題が発生する可能性があると想像できます。

多数のユーザーを想定していない場合は、この間隔を1分程度に調整できます。

4
Polynomial