31

したがって、基本的に、セッション変数を使用する方法がどれほど安全か疑問に思っています。

ユーザーが自分のユーザー名/パスワードを入力するログインフォームがあり、パラメーター化されてクエリが実行され、ユーザー名/パスワードが存在する場合は、db テーブルからユーザー ID が返されます。これは、すべてのユーザーに固有です。

私がこの値を持っているとき、これはセッション変数uID内にユーザーIDを格納する安全な方法であるかどうか疑問に思っていますか? とにかく、これは私がそれを行う方法です、

Session["uID"] = (int)dt.DefaultView[0]["userID"];

FormsAuthentication.RedirectFromLoginPage(username.Text, false);

Response.Redirect("userPage.aspx", false);

次に、ページは別のページにリダイレクトされ、セッション変数を使用してデータベースからユーザーテーブルを取得します。

フィードバックをお寄せいただきありがとうございます

4

5 に答える 5

50

セッション状態は、使用する保存方法 (メモリ内、セッション状態サーバー、またはデータベース) に関係なく、完全にサーバー側で保持されます。

したがって、サーバーがハッキングされない限り、セッション変数は安全です。また、サーバーがハッキングされた場合、IIS プロセスのメモリを分析する方法を見つけない限り、ハッカーは自分のセッションのデータにしかアクセスできません。

于 2012-11-19T10:10:31.390 に答える
22

非常に安全です。.NET セッション変数は、クライアント側から表示できる Cookie 変数と同じではありません。このインスタンスのセッション変数は、C# コードからのみアクセスできます。

したがって、セッション変数は、バックグラウンドで実行されているコード以外の誰も/何かによって編集できないことを知っていれば安全です。

あなたの質問とは完全には関係ありませんが、あなたの場合は知っておくとよいでしょう:

オブジェクト全体をセッションに保存することもできるため、次のようなユーザー オブジェクトをセッションに保存できます。

user_Class user = new user_Class();
user.UID = 1;
Session["User"] = user;

次に、各ページのロード時にそれをロードします。

user_Class user = (user_Class)Session["User"];

その後、毎回セッションから user.UID を取得できます。

于 2012-11-19T10:10:11.423 に答える
3

セッションに関しては、データに直接アクセスできないので安心できます。何らかの理由で、悪用される可能性のあるセッションからアプリケーションがデータを直接返す場合でも、これを行う理由はほとんどないため、リスクは最小限に抑えられます。

セッションに関する最もリスクの高い部分は、セッション ハイジャックの形で発生します。すべてのデータがサーバーに安全に保存されていても、「HTTP はステートレスです」という問題全体に対処する必要があります。そのため、サーバーが適切なセッション データを検索できるように、何らかの識別子をクライアントに格納する必要があります。しかし、何らかの方法で別のシステムがその ID を取得した場合、サーバーがセッションをアクティブにしている限り、そのシステムはあなたのふりをすることができます。

Web サイトでのクロス サイト スクリプティングの可能性に継続的に対処する以外に、安全な接続なしでできることはあまりありません。それでも、不適切に実装される可能性があります。

于 2012-11-19T10:41:21.677 に答える
3

あなたのウェブサイトが単一のサーバーを超えて成長するまでは、すべて問題ありません。次に、セッション プロバイダーを状態サーバーに移行するか、SQL サーバーでバックオフする必要がありますが、これは少し面倒です。

セッション セキュリティに関する問題の包括的なリストについては、http://msdn.microsoft.com/en-us/library/ms178201%28v=vs.80%29.aspxを参照してください。

于 2012-11-19T10:14:58.167 に答える