30

アプリケーションからサードパーティのサイト (SSO) に移動する必要があります。これは、chrome、IE9、および Firefox ではうまく機能しますが、safari では機能しません。ページで iframe を非表示にして Cookie を設定し、実際の iframe に移動するという回避策がありましたが、このトリックは現在は機能しません。また、サード パーティの URL としてアクションを使用して新しいウィンドウを開いて、ブラウザーに Cookie を設定し、iframe で同じウィンドウを開こうとしましたが、これにはハックのように見える小さなウィンドウが開かれるという欠点があります。Safari ブラウザの iframe に Cookie を設定する回避策はありますか??

4

3 に答える 3

23

トラッキング Cookie の概要

「トラッキング Cookie」は、オンライン広告エコシステムの非常に重要な部分です。多くの使用シーンがあります。リターゲティングと呼ばれる一例を次に示します。

多くのインターネット ショッパーは、e コマース サイトでお得な情報を見つけた後、すぐに購入しないことが知られています。彼らは見て、ウェブサイトを離れ、実際の注文をするために数時間または数日で戻ってきます.

これらのユーザーを刺激するために、ウェブサイトはいわゆるリターゲティング技術を利用しています。基本的に、彼らは注文をせずにウェブサイトを離れたユーザーを記憶し、他のウェブサイトで関連する広告を表示したいと考えています. 通常、e コマース Web サイトは、そのような作業をアド エクスチェンジや DSP などのオンライン広告プラットフォームに委任します。

技術的な観点からは、次のように機能します。

  • Web サイトの所有者には、「トラッキング ピクセル」と呼ばれる小さな HTML コードがあります。トラッキング ピクセルが透明な GIF 画像である単純なケースを考えてみましょう。

    <img src="http://pixel.sample-ad-exchange.com/pixel.gif">

  • http://pixel.sample-ad-exchange.com/pixel.gifuser_id という名前のドメイン「.sample-ad-exchange.com」の Cookie をドロップします。この Cookie には、生成された一意のユーザー ID が保存されます (Cookie が既に存在する場合、サーバーはこの部分をスキップします)。

  • sample-ad-exchange.com は、この ID を持つユーザーが e コマース サイトにアクセスしたことを内部的に記憶しています。

  • sample-ad-exchange.com が別の場所で広告を表示するように要求されると (たとえば、tag.sample-ad-exchange.com/show_ad.js を呼び出して)、HTTP 要求と共に user_id Cookie を受け取ります。

  • sample-ad-exchange.com は、このユーザーが以前に e コマース サイトにアクセスしたかどうかを内部的にチェックします。もしそうなら、彼に非常に関連性の高い広告を表示することができます

問題

ご覧のとおり、Cookie をドロップする機能は、リターゲティング スキームの実行可能な部分です。この種の Cookie は「サードパーティ Cookie」と呼ばれます。これは、トラッキング ピクセル コードが e コマース サイトのドメイン (my-cool-store.com など) にあり、ピクセル自体がサードパーティの広告にあるためです。取引所のドメイン (.sample-ad-exchange.com)。

デフォルトでは、ブラウザごとにサードパーティの Cookie に関するポリシーが異なります。

  • 8.0 より前の Chrome、Firefox、IEは常にサードパーティの Cookie を受け入れます

  • IE 8.0 以降では、Web サイトが Cookie の使用方法を明示的に宣言している場合にのみ、サードパーティの Cookie を受け入れます。宣言は P3P プロトコルを介して行われます。W3C のすべての仕様と同様に、これも非常に難解です。しかし本質は、Cookie を含む http 応答とともに送信する必要がある「P3P」と呼ばれる HTTP ヘッダーです。このヘッダー コンテンツは問題なく動作しますが、正確に何を宣言しているのかはわかりません。「P3P: CP="NOI DSP COR NID CURa ADMa DEVa PSAa PSDa OUR BUS COM INT OTC PUR STA"」

  • Safariはサードパーティの Cookie を受け入れません

iPad が登場して絶大な人気を得るまでは、Safari は業界にとって大きな問題ではありませんでした。調査によると、iPad ユーザーは通常の PC ユーザーよりもオンラインで買い物をする傾向があります。

トリック 1.0 (もう動かない)

実際、Safari はサードパーティの Cookie を拒否しない場合があります。ユーザーがサードパーティ ドメインに関連するアクションを行った場合に発生します。Google アナリティクス (および他のプラットフォームも) は、この機能を利用しました。つまり、iframe とシミュレートされたフォーム サムビットをその中に挿入しました。ここでは、技術的な詳細については説明しません。第一に、このハッキングにより Google は 2,250 万ドルの損失を被り、第二に、このトリックは Safari の最新バージョンでは機能しなくなりました。

トリック 2.0 (HTML5 ローカルストレージ)

このトリックのアイデアは、HTML5 localStorage API を使用することです。この API は Cookie に非常に似ています。JavaScript からユーザーの設定を管理し、ユーザーのボックスにローカルに保存することができます。ユーザーIDをlocalStorageに保存しないのはなぜですか? 私が思いついた最初のバージョンのコード:

  <script type="text/javascript">
if (typeof navigator != "undefined" && typeof navigator.vendor != "undefined" &&                               navigator.vendor.indexOf("Apple") >= 0 && typeof localStorage != "undefined") {
    //Check if browser is made by Apple (means it's Safari) and local storage is available
    var userId = localStorage.getItem("user_id");
    if (userId == null) {
        //set user is if user is unknown
        userId = Math.random();
        localStorage.setItem("user_id", userId);
    }
    var img = document.createElement('img');
    img.src = "http://pixel.sample-ad-exchange.com/pixel.gif?user_id=" + user_id;
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(img);
}

アイデアは非常に簡単です。ローカル ストレージで user_id キーを探し (存在しない場合は作成します)、user_id を GET パラメータとしてピクセル サーバーに渡します。次に、サーバーは Cookie を発行する代わりにこの ID を記録します。

しかし、このコードはうまく機能しません。各ドメインには独自のローカル ストレージがあります。また、トラッキング ピクセルが my-cool-store.com で起動された場合、user_id は my-cool-store.com ローカル ストレージに保存されます。同じユーザーが後でトラッキング コードを使用して other-domain.com にアクセスすると、新しいユーザーとして扱われます。

その古い良いトリックを iframe で修正するとうまくいきます。img タグの代わりに、pixel.sample-ad-exchange.com 内のどこかにソースを含む iframe タグを挿入します。そして、iframe 内にユーザー検出コードを配置します。iframe は「内部」で実行されるため、pixel.sample-ad-exchange.com のローカル ストレージはすべての追跡サイトで同じになります。完全な例を次に示します。

追跡コード:

<script type="text/javascript">
if (typeof navigator != "undefined" && typeof navigator.vendor != "undefined" &&       `navigator.vendor.indexOf("Apple") >= 0 && typeof localStorage != "undefined") {`
    var iframe = document.createElement('iframe');
    img.src = "http://pixel.sample-ad-exchange.com/iframe.html";
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(img);
}
</script>

iframe コード ( http://pixel.sample-ad-exchange.com/iframe.html)

<html>
<head></head>
  <body>
  <script type="text/javascript">
var userId = localStorage.getItem("user_id");
if (userId == null) {
    //set user is if user is unknown
    userId = Math.random();
    localStorage.setItem("user_id", userId);
}
var img = document.createElement('img');
img.src = "http://pixel.sample-ad-exchange.com/pixel.gif?user_id=" + user_id;
var body = document.getElementsByTagName('body')[0];
body.appendChild(img);
</script>
</body>
</html>

法律問題

興味深い質問は、この方法が合法かどうかです。次の会社がそれを使用する場合、Znd は 2250 万ドルの罰金を科されます。私は弁護士ではありませんが、Safari の設定で「サードパーティや広告主からのサードパーティの Cookie をブロックする」と明示的に指定されており、localStorage は「Cookie」ではないため、常識的な観点から見ると、上記のアプローチは正当に思えます。

于 2014-08-21T08:47:37.097 に答える
1

非表示の (または非表示でない!) iframe は機能しません。同じオリジン ポリシーに違反するからです。

CORS - "Cross Origin Resource Sharing" を検索してみてください。これは、現在すべての主要なブラウザーに実装されている標準です。

于 2014-08-18T13:26:14.863 に答える