私は最近、ここでASP.NET セッションをより安全にすることに関する記事を読みましたが、最初は本当に便利に思えました。
以前は、ユーザーの IP アドレスをセッションに保存し、その後のすべてのリクエストで、リクエスト元の IP が保存されている IP と同じであることを確認していました。
この記事のコードは、ユーザーの IP を含むハッシュ化されたメッセージ認証コードをセッション Cookie の一部として保存することを除いて、IP アドレスをチェックすることによってセッションも保護します。リクエストごとにハッシュ化された MAC が 2 回作成されるため、処理が少し遅くなると思います。
私はすでに彼らのコードに潜在的な欠陥があることを確認できます.MACを生成するために使用されたキーを何らかの方法で取得した場合、独自のIPで有効なMACを生成できます.IPを偽造する必要さえありません.セッションが開始されました。
オーバーヘッドが大きくなるだけでなく、簡単な方法よりも攻撃を受けやすい単純な問題に対する非常に複雑な解決策のように思えます-要点を完全に見逃していない限り。
では、なぜこのアプローチは、私が使用していたより単純なアプローチよりも安全なのでしょうか?
余談ですが、著者は、一部のユーザーの IP は、プロキシの背後にある場合、リクエストごとに変更されるため、比較に IP アドレス全体を使用すべきではないと述べています。X_FORWARDED_FOR をチェックした場合、これはまだ当てはまりますか?
ありがとう!