Session を認証メカニズムとして使用しない主な理由は、アプリケーションがSession Fixationに対して脆弱になる可能性があるためです。たとえば、ユーザーが HTTP プロトコルを使用してサイトにアクセスし、ASP.NET_SessionId
Cookie に保存されているセッション ID を受け取った場合に問題が発生する可能性があります。ユーザーは後でログインする可能性があり、ログイン ページが HTTPS で保護されている場合でも、セッション トークンは HTTP で既に生成されています。つまり、セッション トークンはクリアテキストを使用して既に転送されています。
他の点に答えるには:
セッション ID が Cookie に保存されている場合、セッションが Cookie よりも安全なのはなぜですか?
セッションに保存されるデータはサーバー側に保存されるため、攻撃者がこのデータを改ざんすることはより困難です。すべての Cookie ストアは、データ自体ではなく、このデータのトークンです。FormsAuthenticationProvider
そうは言っても、上記のようにセッションの固定を回避する理由から、セッションの開始時ではなく、ログインが完了すると新しい認証トークンが作成されるため、 を使用する方が安全です。
これをより安全にすることはできますか (そして、引き続きセッションを使用できますか)? 内部的に ASP.NET ユーザー認証システムはどのようにそれを行うのですか?
組み込みのプロバイダーはすでに目的に適合しているため、要件を満たすために別のメカニズムをごまかすのではなく、それを使用することをお勧めします。また、拡張性にも優れているため、必要に応じてカスタマイズできます。ASP.NET ユーザー認証は、暗号化されたチケットを作成し、サーバー側の変数への参照を保存するのではなく、Cookie に保存します: http://support.microsoft.com/kb/910443
また、サインアウト メカニズムとそれを保護する方法にも注目してください。特に
SignOut メソッドを呼び出すと、フォーム認証 Cookie のみが削除されます。Web サーバーは、後で比較するために、有効な認証チケットと期限切れの認証チケットを保存しません。これにより、悪意のあるユーザーが有効なフォーム認証 Cookie を取得した場合、サイトはリプレイ攻撃に対して脆弱になります。
詳細はこちら: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx
さらに、ASP 認証 Cookieに"secure" フラグを設定して、MITM 攻撃者による HTTP 経由での漏洩を防ぐことができます。