ユーザーが短期間に何千回もログイン試行を成功させたとしたらどうでしょうか。そのような行動の危険は何であり、どのようにそれらから保護するのですか?
私の頭の中を飛び跳ねる危険のいくつかの例:
セキュリティの面では、あなた自身を保護することができますで:
(このサイトは製品の推奨事項を禁止していますが、これらの各カテゴリのパッケージ化/サポートされている有料製品と、好みに応じたオープンソースオプションがあります。)
これらの基本を超えて何を考えるべきかを伝えることはできませんこのタイプの質問は、公開フォーラムで公開したくないデータに依存しているためです。具体的には:
セキュリティアナリストであれば、これを調査するためのツールが必要です。そうでない場合、組織は経営陣が認識しなければならない赤字を抱えています。セキュリティアナリストではなく、会社にもセキュリティアナリストがいない場合は、調査に役立つセキュリティコンサルタントがいます。
何か臭い臭いがする場合は、セキュリティ監査でこれを行う場合があります。あなたが言った両方の理由でそうしました。
サービス拒否:リクエストが多すぎて、開いているファイルハンドルが多すぎるためにバグが発生するシステムを見てきました。セッションシステムは、ディスク上に開いたままのファイルを持っている可能性があるため、さらに脆弱になると思います。または、並べ替えが適切に実装されていない場合(フルテーブルスキャンがO(n)の場合)、適切なセッションファイル(数千の場合)の検索に時間がかかる可能性があるため、システムが遅くなるかどうかを確認するために多くのセッションを作成します。 、fat32ファイルのリストはO(n)です...人々はあらゆる種類のクレイジーなセットアップを実行しています)。
何万ものトークンを生成して、セッショントークンのランダム性を分析する。
ただし、これらはランダムに生成されるのではなく署名されているため、JWTの場合には意味がありません。重要な点は、サーバー側の状態がないため、ファイルが多すぎてはいけないということです。リフレッシュトークンがない場合は、DoSを試行する可能性のあるサーバー側の状態がまだ残っているためです。
私が知っているさらに3つのオプションがあります。
アカウント共有スキームでもこれを行うことができます。 1つの例はGoogle Playストアアカウントで、一部のオープンソースフロントエンドはサーバーからログインセッションをフェッチします(そのため、サーバーにはパスワードがあり、ログインしてセッションを作成します)。これらのログインセッションは、このオープンソースクライアントを実行しているユーザーに送信され、Playストアを使用できますが、管理者アカウントのアクセス権は付与されません(そのためのアカウントパスワードが必要なため)。これにより、人々はアカウントを共有し、お互いを信頼することなく匿名でAPKファイルをダウンロードできます。
誰もがスヌープし、人々がスヌーピングを回避しようとしているようなサービスを実行している場合、おそらくこれが理由であることにすでに気づいているためです。
下手なボットはこれを行うかもしれません。何かのステータスを確認したり、何らかのアクションを実行したりする場合は、(古いセッションを再利用する代わりに)毎回ログインするだけで、現在アクティブなセッションを管理する必要がなくなります。所有者が非常に頻繁に実行するように設定すると、何千回ものログインが発生する可能性があります。
それほど極端ではないケースでは、人間の「新しいデバイス」からの比較的多数のログインが表示される場合もあります。数千ではなく、おそらく1日あたり数十。
Httpsを実装するまで、stackoverflowでこれを行いました。これは、Cookieがhttp経由でリークすることを望まないためです。私は信頼できるネットワークにログインしてログアウトするので、誰かが安全でないネットワークのhttpページにstackoverflowリクエストを挿入した場合、私のブラウザーはログインしている場所にCookieを送信しません。
今でも私はTwitterのようなものを使ってこれをやっており、彼らが私をWebで追跡させたくないので、彼らのCookieを削除し(自動的に、アドオンを使用)、簡単にログインするだけです(私のパスワードマネージャーを使用して、時々)ツイートを好きになるようなことをしたいとき。
システムは、セッションが多すぎて速度が低下することはありません。それ以外の場合、多数の正当なユーザーが同時にアクティブになると、速度が低下(またはクラッシュ)します。したがって、悪意のある動作の解決策は、システムがそれを処理できるようにすることです。ルックアップが O(log n) (データベースベースのスキームを使用する場合は、セッションID列にインデックスを追加するなど)、ランダムに生成されたトークンを使用する場合は、エントロピーが十分にある(とにかくそれを行う必要があります) )。 JWT(リフレッシュトークンなし)の場合、どちらも適用されません。
システムが非常に小規模で、同時に多数のユーザーを処理できない場合は、ユーザーがすでにアクティブなセッションを持っているかどうかをログイン時に確認し、5つ以上(またはそれ以上)ある場合は、それらの最も古いものを削除します-使用されたセッション。