2012-09-11 13 views
8

私は別のウェブサービスにログインして顧客データを取得するウェブサイト(A)を構築しました。2つのウェブサイトの間でクッキーを共有する

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

これは、(A)(B)が読み取ることができ、次に(B)がWebサービスからデータを要求し、フォームをあらかじめ入力できるCookieに顧客IDを書き込む必要があることを意味します。

  1. ことができるウェブサイト(B)のウェブサイト(A)のためのクッキーをお読みください。

    これは二つの質問を提起しますか?

  2. もしそうなら、誰かがクッキーを編集してそのフォームの他の人のデータを見ないようにするには、(A)のクッキーを暗号化してから、(B)この行に沿って?

Webサービスは、いくつかの他のサイトで消費されるので、これを変更することはできませんように私は、OAuthのか何かに既存のログインを変更することはできません。

答えて

12

号サイトBはサイトA.

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

これは面倒だが可能です。

+0

Chrisに感謝します。問題は、AからBへ移動したいことを示す「ユーザーアクション」がないことです。Aにログインして何らかのアクティビティを実行した後、サイトAのリンクではなく、ある時点でBにナビゲートする可能性があります。サブドメインと同じドメインに2つのサイトを持つことは可能かもしれません。それはそれを可能にするだろうか? – Sean

+0

ログイン後、ユーザーをすぐにWebサイトBにリダイレクトし、そこにCookieを設定してからリダイレクトすると、いつでも(Cookieが保持されたまま)WebサイトBにアクセスし、その情報を利用できるようになります。 –

+0

申し訳ありませんが、最初の読み取りでダブルリダイレクトが表示されませんでした。これは、私にオプション、ありがとう。 – Sean

0

インターネット上には、これを行うことができるオープンソースのツールがありますが、これはクッキーの哲学の背後にある考え方全体に反するものです。クッキーは、1つのドメインのみがアクセスできるようになっています。しかし、あなたはそのドメインと 'ハック'を模擬してブラウザに入れることができます。それは推奨されていないし、いくつかのブラウザは、より厳しいセキュリティを持っており、それを許可していないブラウザがあります。

ウェブサイトAでウェブサービスを作成し、それを読むためにBに読書アクセス権を与えることをお勧めします。

1

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

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

編集:Cookieに大量のデータを保存しないようにすることもできます。おそらく、サイトBがjavascriptで照会できるapiを作成する可能性はありますか?

8

あなたは、同じ会社が両方のサイトを所有していると述べました。あなたが疑うように、サイトがwww.mycompany.comやstore.mycompany.comのようなドメインを持っている場合、Cookieを共有できます。 HTTPレスポンスヘッダはこのようなものになります。

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

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

3

ご使用のすべてのユーザーがHTML5をサポートするブラウザを使用している場合は、addEventListenerを片面に、postMessageを他方の面に使用できるwindow.postMessageメソッドを使用できます。ここに素敵な記事/例があります:https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

その後の手順は簡単です:

  1. は、サイトAにサイトB
  2. に非表示のiframeを追加使用してのwindow.postMessage
  3. 店Aのクッキー
  4. で受け取ったクッキーにBのCookieを送信
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> 
関連する問題