47

別の Web サービスにログインして顧客データを取得する Web サイト (A) を構築しました。

(A) を所有する組織には、Web フォームを持つ Web サイト (B) もあります。彼らは、(A) にログインした顧客が (B) をクリックして、詳細が事前入力されたフォームを表示できるようにしたいと考えています。

つまり、(A) は顧客 ID を Cookie に書き込む必要があり、(B) はその Cookie を読み取ってから、(B) Web サービスからデータを要求し、フォームに事前入力することができます。

これにより、次の 2 つの疑問が生じます。

  1. Web サイト (B) は Web サイト (A) の Cookie を読み取ることができますか?

  2. もしそうなら、誰かがクッキーを編集してフォーム内の他の人のデータを見るのを防ぐために、(A) でクッキーを暗号化し、(B) で復号化するようなことをする必要があります - この行に沿った提案はありますか?

Web サービスは他のいくつかのサイトで使用されているため、既存のログインを OAuth などに変更することはできません。そのため、これを変更することはできません。

4

7 に答える 7

45

いいえ。Web サイト B は、Web サイト A から Cookie を読み取ることはできません。

最も簡単な回避策は、Web サイト A から Web サイト B にログイン/資格情報を渡し、Web サイト B に別の Cookie を設定させることです。たとえば、Web サイト A にログインした後、暗号化されたクエリ文字列を使用して Web サイト B にすばやくリダイレ​​クトすることができます。次に、Web サイト B は情報を読み取り、独自の Cookie を設定して、ユーザーをサイト A にリダイレクトします。

面倒ですが可能です。

于 2012-09-11T13:15:24.550 に答える
40

同じ会社が両方のサイトを所有しているとおっしゃいました。ご想像のとおり、サイトが www.mycompany.com と store.mycompany.com のような同じドメインを持っている場合、それらは Cookie を共有できます。HTTP 応答ヘッダーは次のようになります。

Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com

クライアントはこのデータに直接アクセスできるため、改ざんが検出されるように署名も含める必要があります。通常、すべてが暗号化されて「トークン」に署名され、それが Cookie として設定されます。しかし技術的には、署名だけが必要です。

于 2012-09-12T18:48:26.807 に答える
2

Cookie は、設定されている単一のドメインにのみアクセスできます。

同じドメインで 2 つのサブドメインを使用している場合、Cookie を共有することは可能だと思いますが、ブラウザは 1 つのドメインに設定された Cookie を他のドメインに送信しません。

編集:大量のデータを Cookie に保存することも避けたいと考えています。サイト B が JavaScript でクエリできる API を作成できる可能性はありますか?

于 2012-09-11T13:20:14.893 に答える
1

インターネット上にはそれを可能にするオープンソース ツールがありますが、これは Cookie の哲学の背後にある考え方全体に反しています。Cookie は、1 つのドメインだけがアクセスできるようになっています。ただし、そのドメインをモックして、ブラウザに「ハック」することはできます。これはお勧めできません。一部のブラウザーではセキュリティが強化されているため、許可されていません。

Web サイト A に Web サービスを作成し、B に読み取りアクセスを許可してそれを読み取ることをお勧めします。

于 2012-09-11T13:19:48.673 に答える
1

潜在的な回避策: セカンダリ サイトでインライン フレームを使用して、プライマリ サイトのコンテンツを表示することができます (ウィンドウ全体を占有します)。

<!DOCTYPE HTML>
<html>  
  <head>  
       <title>your page title</title>  
        <style type="text/css">
            body, html {
            margin: 0; padding: 0; height: 100%; overflow: hidden;
            }
            #content {
            position:absolute; left: 0; right: 0; bottom: 0; top: 0px; 
            }
        </style>
  </head>  
  <body>
    <div id="content">
    <iframe width="100%" height="100%" frameborder="0" src="http://yourMainSite.com/dataDependentPage.php" ></iframe>
    TESTING
    </div>
  </body>  
 </html>
于 2017-10-17T20:48:27.463 に答える