6

私はウェブサイト開発にかなり慣れていません。ユーザーがユーザー名/パスワードでログインし、それに応じてサーバーからセッションIDを取得するサイトで作業しています。このセッション ID は、要求ごとにサーバーに送り返されます (そして、新しいセッション ID が返されます)。

ユーザーが複数のタブまたはウィンドウでサイトを開いた場合に、サイトが適切に機能することを望みます。つまり、あるタブでログインすると、別のタブでメンバー専用の URL を開くと、ログインしなくても機能します (また、あるタブでログアウトすると、すべてのタブからログアウトされます)。最新のセッション ID をクッキー。そうすれば、最新のセッション ID をすべてのタブで「共有」できます。

しかし、私は Cookie といくつかのセキュリティ上の脅威について読み始めています。すべてのリクエストで Cookie が送信されることを知りませんでした。クッキーをサーバーに送信する必要はありません。sessionID は xhr リクエストのヘッダーに追加されますが、Cookie としては読み取られません。したがって、この Cookie の送信を無効にする方法があるかどうか疑問に思っています。私の唯一の目的は、同じブラウザー内の複数のタブ/ウィンドウが同じセッションを共有できるようにすることです。

cookiesのpath パラメータを調べていました。どうやらこれは、Cookie がサーバーに送信されるタイミングを制限するために使用できますか? パスを決して使用されないものに設定するとどうなりますか? これにより、Cookie が自動的に送信されなくなりますか? JavaScriptからのみアクセスしたい。

同僚は、このアプリケーションのサーバー側に多くのセーフガードを配置しましたが、ここでは説明しません。したがって、この質問は、最適なセキュリティのために、特に Cookie を使用して、クライアント側でどのような予防策を講じることができ、また行うべきかについてのものです。一度に複数のタブを開いて会員専用サイトを適切に動作させるためのより良い方法があれば、私はすべて耳にします。

4

3 に答える 3

7

HTML 5 には、Cookie のようにキーと値のペアを格納するlocal storageがあることを今発見しましたが、すべてのサーバー リクエストで送信されるわけではありません。IE 7 以前を除くすべてのブラウザーでサポートされているため、可能な場合はこれに切り替えて、タブ間でデータを共有できるようにし、IE 7 以前では代わりに Cookie を使用します。

于 2013-08-09T22:45:17.283 に答える
1

ブラウザが Cookie を送信しないようにすることは、そもそも Cookie を使用するという目的を無効にしているようです。

各リクエストで sessionID を送信したくない場合、なぜ Cookie を設定するのでしょうか? より良い解決策は、サーバーからブラウザーに送信するカスタム応答ヘッダーを使用することです。これはユーザーの制御下にあり、すべてのブラウザー要求で自動的に送信されるわけではありません。とにかくリクエストヘッダーを使用してsessionIDを送信しているため、カスタムヘッダーを使用してサーバーからそれらを受信し、これを各XHRからJavaScriptに読み込むことができます。

于 2013-08-09T09:17:11.607 に答える
1

sessionID はすでに Cookie に保存されているため、管理する必要はありません。HTTP プロトコルはステートレスであるため、状態を維持する唯一の方法は Cookie を使用することです。セッション値を設定すると、サーバーはその Cookie ID (セッション ID) に関連付けられた項目の辞書を検索します。

ステートレスとは、リクエスト間で HTTP が、ユーザーがまだ生きているかブラウザーを閉じたかを認識できないことを意味します。したがって、リクエストごとに、ブラウザはすべての Cookie 値をドメインのリクエストに添付します。SessionId は、ユーザーがサイトにアクセスすると自動的に Cookie に保存されます。次に、サーバーはその値を使用して、ユーザー セッションで設定したものを検索します。

セッションの処理は、使用しているプログラミング言語やサーバーによって異なりますが、通常はプログラマーから離れて抽象化されています。

セッションに関して言えば、さまざまな理由でセッションが安全ではなくなります。たとえば、攻撃者がセッション Cookie の値を入手できた場合、その Cookie を再生してセッションを乗っ取ることができます。そのため、セッションはユーザー情報を保存するための非常に安全な方法ではありません。代わりに、ほとんどの人が行うことは、ユーザーの詳細を含む暗号化された Cookie 値を作成することです。Cookie は「セッション Cookie」である可能性があります。つまり、ユーザーがブラウザー ウィンドウを閉じるとすぐに Cookie がブラウザーから破棄されます。暗号化された Cookie には、ユーザー情報とロール情報、および要求を送信しているユーザーが Cookie の発行先と同じユーザーであることを確認するための識別子 (通常はクライアントの IP アドレス) が含まれています。

最初にウィキペディアで HTTP プロトコルと HTTP Cookie の詳細を確認してください。

また、ASP.NET のメンバーシップ プロバイダー モデルを確認してください。これは、サイトをセキュリティで保護するのに役立つ非常に優れたツールです。

http://msdn.microsoft.com/en-us/library/sx3h274z(v=vs.100).aspx

于 2013-08-08T22:36:44.240 に答える