複数のクライアントが同じセッションIDを使用しないようにするにはどうすればよいですか?Webサイトでのセッションハイジャックを防ぐためにセキュリティの層を追加したいので、これを求めています。ハッカーが何らかの方法で別のユーザーのセッションIDを見つけ出し、そのSIDを使用してリクエストを行った場合、サーバー上で単一のSIDを共有しているさまざまなクライアントがあることを検出し、ハイジャックの試みを拒否するにはどうすればよいですか?
編集
ステートレスHTTPプロトコルの制限により、私が求めていることは不可能であることに気付いたので、慎重に検討した結果、Gumboの回答を受け入れました。HTTPのおそらく最も基本的な原則が何であるかを忘れてしまいましたが、この質問について考えると、少し些細なことのように思えます。
私が何を意味するのか詳しく説明させてください:
ユーザーAがexample.comにログインすると、ランダムなセッションIDが与えられます。簡単にするために、「abc123」とします。このセッションIDはクライアント側でCookieとして保存され、サーバー側のセッションで検証されて、ログインしたユーザーが1つのWebページから別のWebページに移動するときにログインしたままになるようにします。もちろん、HTTPがステートレスでなければ、このCookieは存在する必要はありません。そのため、ユーザーBがユーザーAのSIDを盗み、コンピューター上に値'abc123'のCookieを作成した場合、ユーザーAのセッションは正常に乗っ取られますが、サーバーがユーザーBのSIDを合法的に認識する方法はありません。リクエストはユーザーAのリクエストとは異なるため、サーバーはリクエストを拒否する理由がありません。サーバー上ですでにアクティブになっているセッションを一覧表示し、誰かがすでにアクティブになっているセッションにアクセスしているかどうかを確認しようとしても、セッションに不正にアクセスしているのは別のユーザーであり、同じユーザーではないことをどのように判断できますかすでにセッションIDでログインしているが、それを使用して別の要求を行おうとしている(つまり、別のWebページに移動しようとしている)ユーザー。できません。ユーザーエージェントを確認していますか?なりすましの可能性がありますが、それでも多層防御の測定には適しています。IPアドレス?正当な理由で変更される可能性がありますが、IPアドレスをまったくチェックしないのではなく、完全に正当な理由でIPが常に変更されているデータプランネットワークのユーザーでさえ、IPの最初の2オクテットのようなものをチェックすることをお勧めします通常、IP変更の最後の2オクテットしかありません。
結論として、セッションハイジャックからWebサイトを完全に保護できないことを非難するのはステートレスHTTPですが、セッション攻撃の大部分を防ぐには、グッドプラクティス(Gumboが提供するものなど)で十分です。したがって、同じSIDの複数の要求を拒否することによってセッションをハイジャックから保護しようとすると、単純にばかげており、セッションの目的全体が無効になります。