2

http://www.tripadvisor.co.uk/にアクセスしたところ、ログイン フォームに入力しなくても、Facebook にログインしていたため、ID が認識されました。

Trip Advisor は、Facebook が実行している「インスタント パーソナライゼーション」と呼ばれるプログラムの一部であることがわかりました。

私の質問は次のとおりです。これはどのように機能しますか? 舞台裏で何が起こっているのですか?ブラウザから何が送信され、どのような方法 (例: HTTP POST、iFrame、Ajax など) で、誰に送信されているか?

特に、ブラウザのクロスドメイン スクリプティング セキュリティ ルールにより、この種のことは不可能になると以前は考えていました。exampleone.com のスクリプトが exampletwo.com と通信することは、ブラウザでは絶対にできないと思いました。

では、私が最初に facebook.com に送信した情報に tripadvisor.com がどのようにアクセスできるのでしょうか? クロスドメイン スクリプティング ルールをどのように回避できますか?

PS - Facebook インスタント パーソナライゼーションを無効にできるとは言わないでください。オプトアウトできることはすでに知っています (このページhttps://www.facebook.com/settings?tab=applicationsで)。これはインスタント パーソナライゼーションを可能にするテクノロジーに関する質問です。

編集 -

私の詳細を取得するためにFacebookにリクエストが送信されたと、すでに何人かの人々がコメントしています. そうでなければならないことに同意します。しかし、私が求めているのは、このリクエストが Facebook にどのように送信されるのですか? tripadvisor.com にアクセスすると、ブラウザに tripadvisor.com へのリクエストを行うよう積極的に指示しています。facebook.comではありません。また、tripadvisor.com で実行されているスクリプトは、ブラウザによって facebook.com との通信がブロックされると考えていました。

これは非常に不安です。おそらく、tripadvisor が私の ID を知っている場合、それらのサーバーは Facebook サーバーに私が閲覧したページを通知できます。tripadvistor と facebook の特定のケースでは、私はこれについてあまり気にしません。データは、彼らが私に表示する広告の種類をより適切にターゲティングするために使用されるのではないかと思います. 十分に無害です....

しかし、以前は不可能だと思っていた方法で、私のオンライン ID がこのように知らないうちにドメイン間を行き来できる場合、これは、この技術を悪意のある目的で使用している他のサイトが存在する可能性があることを意味します。だから私は何が起こっているのかを理解したい、そして私がさらされているものを正確に理解したい.

4

3 に答える 3

2

OK、この @BassemDy を手伝ってくれてありがとう - あなたは私に答えの 90% をくれました。

クロスドメイン ルールに違反することなく、tripadvisor がブラウザから facebook にリクエストを送信できることがわかりました。BassemDy が指摘したように、外部ドメインから画像をロードしたり、Google マップなどの外部ドメインから共有スクリプトをロードしたりすると、これは常に発生します...

私が見ることができなかったのは、tripadvisor がどのようにして私のブラウザに facebook にリクエストを送信させ、それが私を特定できるかということでした。

それから答えは私を襲った。もちろん、tripadvisor のスクリプトは私の facebook の Cookie を直接読み取ることはできません... しかし、ブラウザーが facebook にクロス ドメイン リクエストを行うと、私のブラウザーは私の facebook の cookie を facebook に送信します。それは私が欠けていた部分でした。

その後、Facebook は、tripadvisor のスクリプトが読み取れる何らかの方法で応答できるため、tripadvisor のスクリプトは私の身元を特定できます。

OAuth とトークンを使用するすべてのビジネスは、上記のプロセスを安全にする方法にすぎません。その下にあるのは、tripadvisor が私の Facebook Cookie を Facebook に送信できるという事実です。

概念実証として、私が管理する 2 つの異なるドメインで次のテスト スクリプトを実行しました。

domainone.com - login.php

<?php setcookie('yourname','Daniel Howard',0,'/');
exit;

domainone.com - Responder.php

<?php header('Content-type: text/javascript'); ?>
window.cookieFromDomainone = <?= json_encode($_COOKIE) ?>;
window.updateMe();

次に domaintwo.com - test.php

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<p id="identityFromDomainone"></p>
<script type="text/javascript">
    window.updateMe = function() {
        document.getElementById('identityFromDomainone').innerHTML = window.cookieFromDomainone.yourname;
    };
</script>
<script src="http://domainone.com/responder.php" ></script>
</body>
</html>

最初に domainone.com/login.php にアクセスすると、私の名前を含む Cookie が設定されます。Facebookにログインすると、これに似たことが起こります。

次に、domaintwo.com/test.php にアクセスします。

私の domainone.com Cookie を読み取る方法がありません。しかし、私のブラウザは domainone.com にリクエストを送信し、ブラウザは私の domainone.com Cookieをリクエストと共に送信します。次に、domainone.com/responder で Cookie の値が JavaScript に入力され、返された JavaScript が domaintwo.com で実行されます。

実行される JavaScript により、私の ID が domaintwo.com で利用できるようになります。これは、p 要素に私の名前が表示されている場合に示されます。

基本的に、ユーザー ID を要求しようとするサイトにユーザー ID を吐き出すようなコードを簡単に作成できることに、私は非常に驚いています。悪用されるのを待っているシングル サインオンの不十分な記述の試みがどれだけ世の中にあるのだろうか.... Facebook とその仲間が使用しているこの OAuth システムが安全であることを願っています。

于 2013-06-27T02:12:23.010 に答える
1

舞台裏で何が起こっているかについての簡単な技術的説明は次のとおりです。

tripadvisor がページを読み込むと、下に強調表示されている Facebook にリクエストを送信します。

トリップアドバイザーからの Facebook Connect リクエスト

リクエストには、tripadvisor からの特定の ID と、何を返すかを定義するいくつかのパラメーターが含まれています。Facebook はリクエストを検証し、アクセス トークンのように見えるものを、公開情報にしかアクセスできないアプリケーションに返します。このトークンはパートナーにのみ与えられます。

クライアントは常に外部ドメインへの HTTP リクエストを許可されています! それが CDN のしくみであり、他の複数の Web 実装です。現在閲覧しているページ コンテンツを提供しているサーバーに含まれていない外部ソースから画像を取得する場合、これはクロス ドメイン ポリシーに違反しない外部要求です。

Facebook からの応答は次のファイルに含まれています。

xd_arbiter.php?version=25

クライアント側で実行されるのは、トリップアドバイザーが公開情報を取得できるようにする JavaScript コードです。

トリップアドバイザーは実際にお客様の Cookie にアクセスしたり、クロス ドメイン セキュリティ対策に違反したりする必要はありません。すべては Facebook フロントのサーバー側で行われます。Facebookがリクエストの送信を検証すると (つまり、ドメインがいずれかのプログラム パートナーに属していることを確認する)、必要なデータを使用してリクエストを処理します。

tripadvisor の範囲外で URL にアクセスしようとすると、次のようになります。

Facebook リクエストの問題

参考文献:

1.3.2 OAuth 仕様ドキュメントからの暗黙の付与フロー:

暗黙的な付与は、JavaScript などのスクリプト言語を使用してブラウザーに実装されたクライアント向けに最適化された、単純化された承認コード フローです。暗黙的なフローでは、クライアントに認可コードを発行する代わりに、(リソース所有者の認可の結果として) クライアントに直接アクセス トークンが発行されます。グラント タイプは、中間資格情報 (認証コードなど) が発行されないため (および後でアクセス トークンを取得するために使用される) 暗黙的です。

https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-28#page-8

于 2013-06-27T00:02:48.047 に答える
0

これはOAuthと密接に関連していると思います。おそらく、現在ログインしているトークンを自動的にチェックし、OAuth ログインを開始します。

于 2013-06-26T19:05:19.243 に答える