web-dev-qa-db-ja.com

ASP.NET_SessionIdと.ASPXAUTHの両方が必要なのはなぜですか?

ユーザーがログインしているかどうかにかかわらず、セッションに保存して.ASPXAUTHを削除することはできませんか?

18
Daniel Gartmann

ASP.Net_SessionIdは、サーバー上のユーザー session を識別するために使用されるcookieです。セッションは、http要求の間にデータを格納するために使用できるサーバー上の領域です。

たとえば、コントローラアクションは次のことを実行します。

Session["FirstName"] = model.FirstName;

次に、後続のアクションで、最初の名前をセッションから取得できます。

var firstName = Session["FirstName"];

ASP.Net_SessionIdは、そのユーザー要求のセッションを識別します。別のユーザーが別のCookieを送信するため、Session["FirstName"]は、そのユーザーごとに異なる値を保持します。

ASPXAUTHは、ユーザーが authenticated であるかどうかを識別するためのCookieです(つまり、IDが確認されています) )。たとえば、コントローラアクションは、ユーザーが正しいログイン認証情報を提供したかどうかを判断し、提供した場合は認証Cookie sing を発行します。

FormsAuthentication.SetAuthCookie(username, false);

次に、_ [Authorize] 属性を使用してASPXAUTH Cookieの存在を確認することにより、ユーザーがアクションの実行を許可されているかどうかを確認できます。

したがって、要約すると、Cookieは2つの異なる目的のために存在します。 1つはユーザーのセッション状態を判別するため、もう1つはユーザーが認証されているかどうかを判別するためです。

あなたの質問への回答を完了するには、はい、ASPXAUTH Cookieを削除し、セッションを使用してユーザーを識別するだけです(これは古いクラシックASPアプリケーションで行われているのを見てきました)が、お勧めしません。 。懸念事項を明確に分離し、必要に応じて適切な方法を使用することをお勧めします。セッションと認証には、独自のタイムアウト値が設定されます。認証にセッションを使用すると、タイムアウトは1回だけになります。認証にセッションを使用するだけでセキュリティに影響があるかどうかはわかりませんが、それでもそれらを分離しておくつもりです。

29
Dangerous

.NETは、ASP.NET_SessionIdという名前のまったく異なるCookieを発行して、セッション状態を追跡します。

ASPXAUTH Cookieは、ユーザーが認証されているかどうかを判別するために使用されます。

つまり、これらは2つの異なる概念、つまり、フォーム認証を使用したセッション状態管理と認証管理です。

セッションを使用して認証し、フォーム認証を忘れた場合は、.ASPXAUTHが削除されます。

5
Nipun Ambastha

両方が必要であり、いずれかを使用すると、次の脆弱性が発生します。

* ASP.NET_SessionId Alone:Session Fixation

*フォーム認証Cookieのみ:サーバー上の認証トークンを終了できません

また、これらが適切に結合されていることを確認する必要があります。

*疎結合のASP.NET_SessionIDとフォーム認証Cookie:依然として脆弱

ref: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html

2
user2480156

セッション状態と認証は、互いに何の関係もありません。どちらか一方を使わずに使用できます。

0
John Saunders