6

セットアップ:

FormsauthenticationCookie を使用してログイン チケットを保存する Web サイトに取り組んでいます。このサイトにはHTTPHandler、データベースに保存された画像を管理する もあります。ハンドラーはイメージをキャッシュして公開し、20 分で期限切れになります。画像にはページと同じライフサイクルがあるため、画像にもFormsauthenticationCookie が含まれていることに気付きました。構成は IIS 6、Win2k サーバーで、コンテンツの有効期限は有効になっていません。

問題:

私たちが経験しているのは、人物 A がログインして、いくつかのページにアクセスすることです。次に、B さんはログインしていないデフォルトのページにアクセスし、A さんの Cookie を取得して、A さんのすべてのデータを表示できるようにします。IIS で Content Expiration をオンにして問題を再現しましたが、一貫して再現していないため、Content Expiration が問題の再現に役立ったかどうかはわかりません。画像はパブリックとしてキャッシュされており、またFormsAuthentication. これが Web サイトへの攻撃ではないことはわかっています。

この動作に似たようなことを経験した人はいますか? もしそうなら、この問題を一貫して再現する方法について何かアドバイスをいただけますか?

4

7 に答える 7

1

Cookie が応答ヘッダーにあり、A さんのマシンに存在するのと同じ Cookie を B さんに書き出すと想定しています。この問題は、IE 7 では A さん、FireFox では B さんで発生したことに注意してください。また、フォーム認証チケットがサーバーで無効になったため、ユーザー A がログアウトすると、ユーザー B もログアウトされました。そうです、彼らは異なるクッキーを持っていましたが、各クッキー内に同じフォーム認証チケットを持っていました。ただし、1 つはログインせずに生成されました。

この記事も見つけましたが、これが原因かどうかは確認できていません。http://support.microsoft.com/default.aspx?scid=kb;EN-US;917072

LiveHTTP が教えてくれることを確認し、報告します。ありがとう。

于 2008-11-04T22:24:06.000 に答える
0

上記のようにhttpリクエストを調査するためにFiddlerをインストールすると役立つ場合があります。また、Cookieが同じであることを確認してください。ハンドラーまたはフォーム認証システムは静的オブジェクト参照を使用しますか?コードに競合状態がある可能性があります。リソースを適切にロックしていません。

于 2008-12-19T06:08:48.833 に答える
0

もちろん、これらの画像(およびCSSや静的JSファイルなど)がHTTPSとして提供されていない場合、それらの画像は、Cookieとともに、ISPまたは他のプロキシ(実際にはキャッシュ)によるキャッシュの対象になります。

次のようなキャッシュディレクティブがあります。

Cache-control: no-cache="set-cookie,set-cookie2"

...これは「set-cookie」応答ヘッダーをキャッシュしないようにキャッシュに指示することになっていますが、これがどれほど広くサポートされているかはわかりません(標準であるにもかかわらず)。

可能であれば、画像を提供するときにCookieの応答ヘッダーを設定しないでください(セッション管理を完全に制御できない場合は、簡単ではない可能性があります)。特定の画像を表示するためにユーザーを認証する必要がある場合は、それらの画像を公にキャッシュしないでください。

于 2008-11-04T22:33:03.487 に答える
0

申し訳ありませんが、すべてのトラフィックがSSLとしてポート443を通過していたことを忘れてしまいました。画像の設定Cookieを削除する予定です。ただし、すべてのトラフィックがSSLを介して処理される場合に、これがどのように発生する可能性があるかについては、ほとんど混乱していません。

于 2008-11-04T22:42:22.580 に答える
0

すべてのトラフィックは SSL でした... IIS ログを確認すると、すべてがポート 443 を通過していました。前述のように、設定されていた唯一のキャッシュは公開するイメージでした。私たちは、これが問題の原因となっている結果出力キャッシュにあると考えています。

于 2008-11-05T17:31:50.723 に答える
0

ページで出力キャッシュなどを有効にしていませんか?

于 2008-12-18T23:24:37.713 に答える
0

B さんが A さんの Cookie を取得するのはなぜですか? B さんのセッション Cookie が A さんのログイン ID に関連付けられているということだと思います。それが問題の核心です。

A のログイン ID は、セッション Cookie と関連付けることなく、一時ファイルや DB など、リクエストをクロスできる場所に保存されているように思えます。(関連する問題: ページ出力はキャッシュされていますが、セッション Cookie を介して適切に関連付けられていないか、取得されていません。) セッション情報が保存またはキャッシュされている場合は、Cookie に関連付ける必要があります。ログインではなく、ブラウザに属するセッション データの観点から考えてください。

Firefox 拡張機能の LiveHTTP をインストールして、リクエスト/レスポンス ヘッダーを調べます。おそらく、A と B は異なる Cookie を持っていることがわかりますが、サーバー上では両方とも同じログイン ID に関連付けられています。

于 2008-11-04T22:17:09.633 に答える