0

今日は解決しなければならない奇妙な問題があります。クライアントは、ユーザーがログインしたり、別のサイトに移動したり、ブラウザーの戻るボタンを押してもログインしたままになることを許可しないサイトを必要としています。

簡単だと思いました...別のサイトから戻るボタンが押されたときに発生したページイベントが見つからないまで。

JavaScript を使用してリファラー オブジェクトを操作することだけを考えましたが、.NET メンバーシップ システムにアクセスしてユーザーをセッションからログアウトする必要があるため、これでは目的を達成できません。

誰かがこの問題を回避しましたか? もしそうなら、どのように?Global.asaxで達成できる何かが欠けている可能性がありますか? 役立つ場合は、.NET 4.5 / C# を使用しています。

理由:

たとえば、あるオペレーターが自分のマシンのロックを解除したままにして Google にアクセスした場合、別のオペレーターが悪意を持って同じマシンにアクセスし、そのオペレーターのログオンにアクセスするために [戻る] ボタンを押した (クライアントはセキュリティに非常に注意を払っている) ためです。

4

6 に答える 6

1

この問題にはおそらく「魔法のような」解決策がありますが、ここで重要なことは理由にあります。オペレーター A は、オペレーター B の資格情報でサイトを使用することを許可されていません。

クライアントとサーバーの観点からは、サーバーまたはクライアント (ブラウザ) が、いつでも席を変更したことを知る方法はありません。

それがあなたが解決しなければならない問題です。

しかし、おそらく顔検出の実装は少しやり過ぎでしょうか?

于 2012-10-09T13:11:06.730 に答える
1

ユーザーがサイトを離れるたびにログアウトしますか? 毎分サーバーにリクエストを送信するグローバル JavaScript があり、「やあ、サーバー、私はここにいます! 私は Joe Blogs のユーザーです。私はまだサイトにいます」と言っています。サーバーがユーザーからこのメッセージを 1 分以上受信しない場合は、ログアウトしてください。

戻るボタンをオーバーライドしても機能しません。ユーザーが別のタブ/ウィンドウを開いて、そこで Google にアクセスしたらどうしますか?

更新: jquery から.unload()を使用して、ページの離脱をキャッチできます。そして、そのイベントで Cookie を破棄します。

ただし、マシンが放置されていると、悪意のあるユーザーがアクセスを取得するのを止めることはできません。

Update 2 では、非常に短いセッション ライフを設定できます。ユーザーが非アクティブな場合 (またはページを離れた場合) - ログアウトします。ユーザーが画面を長時間見ている (非常に長いフォームに入力する) 場合にログアウトする際の煩わしさを防ぐには、JavaScript を作成して、サーバーに対して定期的に (5 分ごとに) ダミー ページを表示するようにします。ロードされます。

ソースは次のとおりです:ユーザーが私のPHP Webサイトを離れたときにログアウトするように強制しますか?

于 2012-10-09T12:34:01.330 に答える
1

サイトを最初から設計している場合は、ヘッダーを追加して、キャッシュが不要であることを指定することでこれを行うことができます。

Cache-Control: no-cache Pragma: no-cache

しかし、その場合、1 つのページからすべてのサイトにアクセスする必要があります。ページは同じように表示される必要はなく、さまざまなコントロールなどを含めることができますが、コンテンツは通常の ASP.NET モデルではなく、POST パラメーターによって決定されます。

たとえばDefault.aspx、ナビゲートするには、少なくとも 2 つのパラメーターを POST バックします。1 つは移動先のページで、もう 1 つは予測不能なトークンです。

例えばToken=3Zd2f4O61Z&Page=OrderHistory

ページが読み込まれるたびに、トークンとページ タイトルの組み合わせを検証し、OK の場合はページを表示し、その時点でユーザーに実行してもらいたいナビゲーションまたはアクション用の新しいポストバック データ リンクを生成します。ユーザーが古いトークンを使用して同じページにアクセスしようとすると、セッションが期限切れになり、ユーザーがログアウトされます。戻るボタンをクリックすると、ユーザーは投稿データを再送信するように求められるため、これが最も安全な方法です。[OK] をクリックすると、ブラウザーはトークンを送信しますが、サーバーはトークンが無効であることを認識し (既に使用されており、サーバーによって破棄されているため)、ユーザーをログアウトします。

このメソッドは、Cookie の値をチェックするだけでなく、各リクエストのペイロードでトークンを検証しているため、CSRF からも保護します。

サイトを再設計できない限り、これが役に立たないことはわかっていますが、最初から要件を持って誰かがここに着陸した場合に備えて、このソリューションを追加すると思いました.

于 2012-10-10T14:20:01.557 に答える
0

なぜそれが必要なのかについて、さらに詳しい情報を提供していただけますか? あなたの場合、別のサイトにリダイレクトされたユーザーをサインオフとして扱い、サイトのURLにアクセスしたら、別のデータベーステーブルまたはフィールドにマークまたはフラグを立てることができるという解決策があると思いますおそらくフラグをチェックして、自動的にサインインし直してください。

于 2012-10-09T12:30:48.160 に答える
0

このように、サイトのランディング ページに何も含まれないようにすることができます。これは、ユーザーが [戻る] ボタンを押したときに、最初にリダイレクト ページに戻り、ホームページに戻るようにします。

ただし、ユーザーが一度に複数のページをスキップするか、別のウィンドウを開くことを選択した場合、これをオーバーライドすることができます。

于 2012-10-09T12:24:11.173 に答える
0

JQueryunload()関数は、javascriptと同様にあなたの問題を解決しますwindow.onbeforeunload...

于 2012-10-09T12:48:25.730 に答える