1

Session.SessionID を使用して複数のユーザーが同じデータを同時に表示しないようにする ASP.NET アプリケーションがあります。

処理が必要な一連の画像 (BLOB に格納) を含むテーブルがあります。同じ画像を同時に表示できるのは 1 人のユーザーのみです。これを実現するために、各レコードがユーザーによって取得されると、レコードは Session.SessionID で更新されます。この更新は、ReaderWriterLock 内で行われます。

ReaderWriterLock が正しく機能していることを確認するテストを行い、そのブロック内のコードを一度に実行できるセッションは 1 つだけであることを確認しました。

私の現在の理論では、2 人の異なるユーザーが同時に同じ SessionID を取得しているというものです。このアプリケーションのユーザーは、ロックしたレコードまたはロック解除された画像を表示できます。

すべてのページのフッターに SessionID を表示するようにアプリケーションを修正し、問題が再発した場合に SessionID の値を確認できるようにしました。

SessionID が一意ではないことを示唆する記事や、SessionID が一意であると述べている記事をオンラインで見たことがあります。SessionID が永久に一意ではないことは理解していますが、SessionID の値はアクティブなセッションに対して一意であると見なすことができますか?

このフォーラムでは、同様の問題について説明しています

また、Guid を Session オブジェクトに格納し、Session ID の代わりに一意の ID として使用する必要があるという提案も読みました。

これまでの回答に感謝します。これまでの回答に基づく説明は次のとおりです。

「永遠にロック」 - 5 分間のロック タイムアウトでこれを防ぎます。ユーザーが画像をロックする前に、ReaderWriterLock 内で、古いロックの「クリーンアップ」(5 分以上ロックされた画像のロックを解除します)、最も古いロック解除された画像を取得するためのクエリ、およびそれを「ロック」する更新ステートメントを実行します。現在のセッションへのイメージ。

この問題の考えられる原因は、1 人のユーザーがイメージを「ロック」した後、短い休憩のために PC から離れた場合です。彼らが 5 分間何もしなかった場合、画面上のその画像のロックが解除され、別のユーザーによって開かれる可能性があります。問題が報告されたときにこのシナリオについて言及し、ユーザーが継続的に作業していることを確信しました.

「別のウィンドウ/タブ」 - 私は実際にエラーを自分の目で見たことはありませんが、問題を報告した人は、2 つの異なる PC とログイン ユーザーの 2 つの異なるユーザー名であると私に言いました。

ページにセッション ID を表示していることを願っています。次にそれが発生したときに、それが 2 台のマシンで同じセッション ID なのか、それとも他の問題なのかを確実に判断できるようになることを願っています。この問題は、テスト段階では発生していないため、多数の同時ユーザーの症状であると思われます。

これまでの回答に感謝します。詳細がわかり次第、この質問を更新します。

ユーザーは私に全容を教えてくれなかったようです。セッションIDは、受け入れられた回答に従って、私たちの場合は一意です。ユーザー 1 が 5 分間の「放棄された画像」のロック解除プロセスでアイドル状態だったため、2 人のユーザーが同時に同じ画像を見ることができました。この問題を回避するために、「放棄されたイメージ」タイムアウトがセッション タイムアウトと一致するように引き上げられました。

4

4 に答える 4

3

ASP.NET がセッション ID を割り当てる限り、セッション ID はユーザーごとに一意ですが、これは悪意のあるユーザーに対する保証ではありません (ユーザーは、割り当てられた ID を手動でコピーして、他のユーザーに渡すことができます)。

ユーザーが一度に複数のリクエストを行うことは完全に有効であるため、ここで表示される可能性が高いのは、同じユーザーからの複数のタブまたはウィンドウです。

あなたが望むことをするために、私は尋ねなければなりません. 画像を表示した後、別のページ/画像に移動する代わりにブラウザを閉じた場合、(永久に失われた) セッション ID にロックされたままになりますか?

ある種のチェックアウト スキームを使用している場合 (ユーザーがイメージを意図的にチェックアウトおよびチェックインする必要がある場合)、ユーザー全体ではなく、そのチェックアウト (新しい Guid) に一意の番号を使用する必要があります。

于 2009-02-26T12:05:24.333 に答える
2

ここに赤い旗があります。

はい、できますが、将来的にそれらを再利用できないようにするか、少なくとも再利用をできるだけ困難にすることが絶対に不可欠です。

これは、サーバー側アプリケーションがセッション ID をどの程度うまく処理し、状態を維持しているかによって異なります。session_ID の有効期間を制限すること、認証/承認状態をどのように管理するかを (実際に MUST) 検討する必要があります。

トップ 10 の投資銀行の重要な取引プラットフォームで、セッション ID をオンザフライで (承認されたアクセス許可を含む) 取得し、(ParosProxy.org の Paros などのツールを介して) 再利用して、数百万ドルを実行できるのを見ました。誰かの代わりに取引します。現在の気候では、これは問題ですか? ;-) 申し訳ありませんが、これらのピエロに名前を付けて恥をかかせたいと思っていますが、そうしません。

このシナリオの可能性はどれくらいですか? スイッチド ネットワークでセッション ID を取得できますか? ハッキング ツール CAIN を使用してローカル VLAN 内で確実に ARP ポイズニングを利用することができます。

不十分に作成されたサーバー側アプリケーションでは、セッション ID を予測することもできます。ツール WebScarab を確認してください (ペンテスターの武器庫にあります)。これにより、ID のランダム性が検出されます。別の重要なアプリケーションと同じ銀行で、アプリケーションにアクセスして取引するための独自のセッション ID を生成できます。彼らの焦点は、セキュリティよりも低遅延 (ビジネスに不可欠) でした。

イントロは Owasp.org にあります。

ノエリー・ダン

于 2009-02-26T13:09:28.363 に答える
1

セッションIDは、ほぼ確実にユーザーに固有です。複数のユーザーがSessionIDを共有する障害モードは、今日では非常にまれです。ただし、ユーザーは、表示されている効果を作成するためにいくつかのことを行うことができます。

たとえば、ユーザーはブラウザでいくつかのタブを開くことができます。これらのタブはすべて同じセッションIDを共有します。したがって、彼女がこれらのブラウザタブを行ったり来たりすると、表示されている効果が得られる可能性があります。

もう1つの問題は、ユーザーがボタンとリンクを頻繁にダブルクリックすることです。これは、処理要求が同じセッションIDで2回発行される可能性があることを意味します。最初にこの可能性を確認します。

于 2009-02-26T11:39:35.473 に答える
1

このリンクは、セッション ID が一意であることを示しています - http://support.microsoft.com/kb/899918

セッション ID は、常に 1 つのセッションだけがその ID を持つという点で一意です。

そうでなければ、大声で叫ぶ人がたくさんいると思います。

于 2009-02-26T10:53:23.713 に答える