2012-01-05 11 views
0

セッション変数にいくつかの値を格納する予定のWebアプリケーションを開発しています。セッション変数を使用する予定の主な理由は、DBアクセスの一部を減らすことです(ユーザーあたり500バイトのデータが最大であります)。ASP.NETセッション変数を保護するための注意

ユーザーがセッションIDキーを持っていると仮定した場合、ユーザーはセッションコレクションで非表示にする変数にアクセスできません。また、私はViewStateの約世話をする必要があります(私はこのアプリでそれをオフにする予定が、知っていいだろう)私は、ユーザーが私は隠す変数にアクセスできないことをしなければならないものを

+0

「アクセス」を定義します。ユーザーが別のユーザーのセッションIDを盗み出して、ページ上にセッションの内容を表示している場合は、アクセスのタイプですか? –

答えて

2

セッションコレクション?

(セッションデータが保存されているサーバーへのルートアクセスがない限り)あまり心配する必要はありません。しかし、私はあなたがあなたのサーバーへのルートアクセスを持っていた場合、セッションデータよりも心配するはるかに大きな問題があると思います。

クライアントはセッション内に格納されているデータにアクセスできません。サーバー側コードのみがアクセスできます。したがって、クライアントに送信する情報を決定するのはあなた次第です。ユーザーに表示されるのは、実際のセッションデータではなく、セッションID(Cookieに格納されている)です。このIDは、各要求時にユーザーが送信します。これにより、サーバーは、構成した状態サーバーのメモリーに保存されている、対応するデータを見つけることができます。

0

ダーリンが指摘しているように、デフォルトのセッション実装では問題ありませんが、セッションに保存するデータを完全に読み取れないようにするには、保存前に暗号化することができます。

1

ユーザは、セッションID文字列を受信します。これは、Cookieに格納されています。したがって、セッションオブジェクト内の個々の値にアクセスする方法はありません(もちろん、これらの値はページにレンダリングされない限り)。

ViewStateでは、すべての値を含むプロパティバッグがページ上の非表示フォームフィールドにシリアル化されます。これらは、気にするユーザーが簡単にデシリアライズすることができます(これは単なる単純なBase64シリアル化です)。ただし、ASP.NETでは、これらの値が改ざんされていないかどうかを確認し、サーバー上の秘密キーでも暗号化することができます。しかし、私は決して "秘密"を何もビューステートに入れないことを勧めます。または、言及したように、必要がない場合は、単にオフにしてください。