8

かなり大規模な ASP.NET Web アプリケーション (C#) で多くのセキュリティ問題に対処しようとしています。セッション固定攻撃を防ぐために、ユーザーが自分自身を認証するたびに新しいセッション ID を生成したいと考えています。ただし、残りのセッションを失うことなく、新しいセッション ID のみを生成したいと考えています。このトピックについていくつかの調査を行った後、いくつかの実用的な解決策を見つけました。

解決策 1: ASP.NET で新しい SessionId を生成
する これは、セッション Cookie を空の文字列に設定して手動でクリアすることを提案しています。ただし、これには、ページを更新するか、AJAX を使用して Cookie が実際に削除されるようにする必要があります。これは、私の特定のケースでは実際には実行可能なオプションではありません。

解決策 2:現在の HTTPContext で新しい ASP.NET セッションを生成する
このアプローチを実装しましたが、期待どおりに動作します。ただし、元のポスターが述べているように、これはエレガントなソリューションとは言えません。また、この投稿は数年前のものであるため、最近はより良い解決策があるかもしれないと期待しています.

私が知りたいのは、私の研究で見逃した代替手段があるかどうか、またはセッション管理の内部を操作せずにソリューション 2 のようなことが可能かどうかです。

4

2 に答える 2

4

セッション管理が ASP.NET の設計によってどのように機能するかにより、目的を達成するのはそれほど簡単ではありません。ソリューション番号 2 についてです。ソリューション (2) は、ASP.NET セッション状態の実装の詳細がどこかで変更されることを考えると、少し危険に思えます。

ユーザーの認証時にセッションから関連データを db/cache に保存し、ユーザーの新しいセッションを取得して、必要なデータを入力するソリューション 1 の変形をお勧めします。データは「認証されていない」セッションから「認証された」セッションに移動しているため、そのデータの検証にも注意する必要があります。

セッション Cookie を手動でクリアすることは、滑りやすい坂道になる可能性がありますNWebsec.SessionSecurityの認証済みセッション識別子で、より堅牢なソリューションを見つけることができます(免責事項: 私はそのプロジェクトの開発者です)。

于 2013-07-17T14:35:28.127 に答える
0

Web.Config は sessionState cookieName="ABC" を変更します

ブロック内の Login.aspx ページで !ispostback 書き込み

Response.Cookies.Add(new HttpCookie("ABC", ""));

楽しみ

・時短が得意!

于 2016-05-20T06:22:53.283 に答える