398

私は 2 つの Web サイトを持っていexample.comますanotherexample.net。にanotherexample.net/page.htmlがありIFRAME SRC="http://example.com/someform.asp"ます。その IFRAME は、ユーザーが入力して に送信するためのフォームを表示しますhttp://example.com/process.aspsomeform.asp独自のブラウザ ウィンドウでフォーム (" ") を開くと、すべて正常に動作します。ただし、IE 6 または IE 7 で IFRAME として読み込むと、example.com の Cookie が保存されません。someform.aspFirefox では、この問題は発生しません。

テスト目的で、 http://newmoon.wz.cz/test/page.phpに同様のセットアップを作成しました。

example.comは Cookie ベースのセッションを使用するため (それについて私にできることは何もありません)、Cookieprocess.aspがないと実行されません。IE にそれらの Cookie を強制的に保存させるにはどうすればよいですか?

HTTP トラフィックのスニッフィングの結果: GET /someform.asp 応答では、有効なセッションごとの Set-Cookie ヘッダー (例: Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY) がありますが、POST /process.asp 要求では、Cookie ヘッダーはまったくありません。

Edit3: 一部の AJAX+ サーバーサイド スクリプトは明らかに問題を回避できますが、これはバグに非常によく似ており、まったく新しい一連のセキュリティ ホールを開きます。簡単だからという理由だけで、自分のアプリケーションでバグとセキュリティ ホールの組み合わせを使用したくありません。

編集: P3P ポリシーが根本的な原因でした。以下に詳細を説明します。

4

22 に答える 22

432

うまくいきましたが、解決策は少し複雑なので、我慢してください。

何が起こっていますか

そのままでは、Internet Explorer は IFRAME ページに低いレベルの信頼を与えます (IE はこれを「サードパーティ」コンテンツと呼びます)。IFRAME 内のページにプライバシー ポリシーがない場合、その Cookie はブロックされます (これはステータス バーの目のアイコンで示されます。クリックすると、ブロックされた URL のリストが表示されます)。

邪眼
(出典:piskvor.org

この場合、Cookie がブロックされると、セッション ID は送信されず、ターゲット スクリプトは「セッションが見つかりません」というエラーをスローします。

(セッション識別子をフォームに設定し、POST 変数から読み込もうとしました。これはうまくいきましたが、政治的な理由でできませんでした。)

IFRAME 内のページをより信頼できるものにすることができます。内部ページが IE で受け入れられるプライバシー ポリシーを含む P3P ヘッダーを送信すると、Cookie が受け入れられます。

解決方法

p3p ポリシーを作成する

出発点としては、W3C チュートリアルが適しています。私はそれを調べて、IBM Privacy Policy Editorをダウンロードし、そこでプライバシー ポリシーの表現を作成し、それを参照するための名前を付けました (ここではpolicy1)。

: この時点で、サイトにプライバシー ポリシーがあるかどうかを実際に確認する必要があります。ない場合は作成する必要があります。ユーザー データを収集するかどうか、どのような種類のデータを使用するか、誰がアクセスできるか、など この情報を見つけて考える必要があります。いくつかのタグを一緒に平手打ちするだけでは、うまくいきません。このステップは、純粋にソフトウェアで行うことはできず、非常に政治的である可能性があります (たとえば、「クリック統計を販売する必要がありますか?」)。

(例: 「このサイトは ACME Ltd. によって運営されており、その運営に匿名のセッションごとの識別子を使用し、明示的に許可された場合にのみユーザー データを収集し、次の目的でのみユーザー データを収集します。データは必要な期間のみ保存され、当社のみが保存されます。などにアクセスできます」)。

(このツールを使用して編集すると、ポリシーのエラー/省略を表示できます。[HTML ポリシー] タブも非常に便利です。下部には、[ポリシーの評価] があります。ポリシーがブロックされるかどうかを簡単に確認できます)。 IEのデフォルト設定による)

エディターは、上記のポリシーの XML 表現である .p3p ファイルにエクスポートします。また、このポリシーの「コンパクト バージョン」をエクスポートすることもできます。

ポリシーへのリンク

次に、ポリシー参照ファイル ( http://example.com/w3c/p3p.xml) が必要でした (サイトが使用するプライバシー ポリシーのインデックス)。

<META>
  <POLICY-REFERENCES>
    <POLICY-REF about="/w3c/example-com.p3p#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
</META>

この<INCLUDE>ポリシーを使用するすべての URI が表示されます (私の場合は、サイト全体)。エディタからエクスポートしたポリシー ファイルがアップロードされましたhttp://example.com/w3c/example-com.p3p

応答とともにコンパクト ヘッダーを送信する

次のように、応答を含むコンパクトなヘッダーを送信するように、example.com で Web サーバーを設定しました。

HTTP/1.1 200 OK 
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content

policyrefはポリシー参照ファイル (プライバシー ポリシーを参照するファイル) への相対 URI でCPあり、コンパクトなポリシー表現です。この例の P3P ヘッダーの組み合わせは、特定の Web サイトには適用できない場合があることに注意してください。P3P ヘッダーは、自分のプライバシー ポリシーを正確に表さなければなりません!

利益!

この構成では、イービルアイは表示されず、Cookie は IFRAME にも保存され、アプリケーションは動作します。

編集:訴訟から身を守るのが好きでない限り、してはいけないこと

何人かの人々は、「邪眼があきらめるまで、いくつかのタグを P3P ヘッダーに平手打ちする」ことを提案しました。

タグはビットの集まりであるだけでなく、現実世界の意味を持ち、それらを使用すると現実世界の責任が与えられます!

たとえば、ユーザー データをまったく収集しないふりをすると、ブラウザーは喜ぶかもしれませんが、実際にユーザー データを収集する場合、P3P は現実と矛盾します。単純明快なことですが、あなたは故意にユーザーに嘘をついています。これは一部の国では犯罪行為となる可能性があります。「刑務所に行って、200 ドルを集めないでください」のように。

いくつかの例 (タグの完全なセットについては p3pwriter を参照してください):

  • NOI : 「Web サイトは特定されたデータを収集しません。」(カスタマイズ、ログイン、またはデータ収集 (***** 分析、誰か?) があるとすぐに、P3P でそれを承認する必要があります)
  • STP : 記載された目的を達成するために情報が保持されます。そのためには、可能な限り早い時期に情報を破棄する必要があります。サイトには、破棄のタイム テーブルを確立する保存ポリシーが必要です。保持ポリシーは、サイトの人が読めるプライバシー ポリシーに含まれているか、そこからリンクされている必要STPあります。」

私は弁護士ではありませんが、P3P ヘッダーが本当に法的拘束力を持っているかどうか、または実際に約束を尊重することなくユーザーに何かを約束できるかどうかを確認するために法廷に行くつもりはありません。

于 2008-12-23T17:08:34.783 に答える
57

この小さなヘッダーを IFrame (PHP ソリューション) のサイトに追加するだけで、邪眼を取り除くことができました。

header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');

ctrl+F5 を押してサイトをリロードすることを忘れないでください。そうしないと、正常に動作しているにもかかわらず、Explorer に邪眼が表示される場合があります。これがおそらく、私がそれを機能させるのに非常に多くの問題を抱えていた主な理由です.

ポリシー ファイルはまったく必要ありませんでした。

編集: IFrame の Cookie に関する問題を説明している素敵なブログ エントリを見つけました。フレーム、ASPX ページ、および拒否された Cookieという C# コードのクイック フィックスもあります。

于 2010-02-19T15:24:43.240 に答える
14

これはこの問題に関する素晴らしいトピックですが、ここや他の場所に投稿されていない重要な詳細 (少なくとも私の場合は不可欠でした) が見つかりました (見逃してしまった場合は申し訳ありません)。Javascript ファイルや画像などの Cookie を設定または使用していないファイルであっても、サードパーティのサーバーから送信されたすべてのファイルヘッダーに渡されます。そうしないと、Cookie がブロックされます。これについては、こちらの投稿で詳しく説明しています: http://posheika.net/?p=110

于 2010-08-23T22:44:45.910 に答える
5

node.jsでこの問題を抱えている人。

次に、この p3p モジュールを追加し、ミドルウェアでこのモジュールを有効にします。

npm install p3p

私はエクスプレスを使用しているので、app.jsに追加します

最初に app.js でそのモジュールを必要とします

var express = require('express');
var app = express();
var p3p = require('p3p');

その後、ミドルウェアとして使用します

app.use(p3p(p3p.recommended));

res オブジェクトに p3p ヘッダーを追加します。余分なことをする必要はありません。

詳細については、次を参照してください。

https://github.com/troygoode/node-p3p

于 2013-04-17T07:06:34.300 に答える
4

できることの 1 つは、ツールで許可されたサイトにドメインを追加することです -> インターネット オプション -> プライバシー -> サイト: somedomain.com -> 許可 -> OK.

于 2009-04-17T10:10:20.277 に答える
3

Azure Access Control Services 経由でのログインオフに関してこの問題を調査していましたが、何も頭と尾を接続できませんでした。

次に、この投稿につまずいたhttps://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

つまり、IE はゾーン間で Cookie を共有しません (例: インターネットと信頼済み​​サイト)。

したがって、IFrame ターゲットと html ページが異なるゾーンにある場合、P3P は何の役にも立ちません。

于 2016-04-06T14:23:18.017 に答える
3

ここで言及されていない解決策の 1 つは、Cookie の代わりにセッション ストレージを使用することです。もちろん、これはすべての要件に適合するわけではありませんが、場合によっては簡単に修正できます。

于 2012-06-13T12:00:40.663 に答える
3

この投稿では、P3P に関する解説と、IE7 および IE8 の問題を軽減するショートカット ソリューションについて説明します。

于 2011-04-05T13:02:35.883 に答える
2

私は以前に完全なP3Pポリシーを実装しましたが、私が取り組んでいた新しいプロジェクトのために再び面倒を経験したくありませんでした。このリンクは、「CAO PSA OUR」の最小限のコンパクトなP3Pポリシーを指定するだけで、問題の簡単な解決策に役立つことがわかりました。

http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html

この記事は、Microsoft kbの記事への(現在は壊れている)リンクを引用しています。ポリシーは私のためにトリックをしました!

于 2011-09-13T14:47:09.543 に答える
2

同様の問題が発生し、今朝 P3P ポリシーを生成する方法も調査しました。独自のポリシーを生成して Web サイトで使用する方法についての私の投稿は次のとおりです:) http://everydayopenslikeaflower.blogspot.com/2009/08/ How-to-create-p3p-policy-and-implement.html

于 2009-08-21T15:39:51.587 に答える
1

p3p.xml ファイルと policy.xml ファイルを次のように結合することもできます。

/home/ubuntu/sites/shared/w3c/p3p.xml

<META xmlns="http://www.w3.org/2002/01/P3Pv1">
  <POLICY-REFERENCES>
    <POLICY-REF about="#policy1">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
  <POLICIES>
    <POLICY discuri="" name="policy1">
      <ENTITY>
        <DATA-GROUP>
          <DATA ref="#business.name"></DATA> 
          <DATA ref="#business.contact-info.online.email"></DATA> 
        </DATA-GROUP>
      </ENTITY>
      <ACCESS>
        <nonident/>
      </ACCESS>
      <!-- if the site has a dispute resolution procedure that it follows, a DISPUTES-GROUP should be included here -->
      <STATEMENT>
        <PURPOSE>
          <current/>
          <admin/>
          <develop/>
        </PURPOSE>
        <RECIPIENT>
          <ours/>
        </RECIPIENT>
        <RETENTION>
          <indefinitely/>
        </RETENTION>
        <DATA-GROUP>
          <DATA ref="#dynamic.clickstream"/>
          <DATA ref="#dynamic.http"/>
        </DATA-GROUP>
      </STATEMENT>
    </POLICY>
  </POLICIES>
</META>

ヘッダーを追加する最も簡単な方法は、Apache 経由のプロキシであり、mod_headers を使用することであることがわかりました。

<VirtualHost *:80>
  ServerName mydomain.com

  DocumentRoot /home/ubuntu/sites/shared/w3c/

  ProxyRequests off
  ProxyPass /w3c/ !
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ProxyPreserveHost on

  Header add p3p 'P3P:policyref="/w3c/p3p.xml", CP="NID DSP ALL COR"'
</VirtualHost>

したがって、/w3c/p3p.xml へのリクエストを除くすべてのリクエストをアプリケーション サーバーにプロキシします。

W3Cバリデーターですべてをテストできます

于 2012-11-09T15:46:56.617 に答える
1

埋め込みが必要なドメインを所有している場合は、IFrame を含むページを呼び出す前に、そのドメインにリダイレクトできます。これにより、Cookie が作成されてリダイレクトされます ( http://www.mendoweb で説明)。 be/blog/internet-explorer-safari-third-party-cookie-problem/

これは Internet Explorer でも機能しますが、Safari でも機能します (Safari はサードパーティの Cookie もブロックするため)。

于 2014-08-27T15:18:04.077 に答える
1

このテーマに貢献するのが少し遅いことはわかっていますが、多くの時間を失ったので、この回答が誰かの助けになるかもしれません.

自分のサイトでサード パーティの Cookie を呼び出そうとしましたが、もちろん、セキュリティ レベルが低くても、Internet Explorer 10 では機能しませんでした...理由は聞かないでください。iframe では、ajax で read_cookie.php (echo $_COOKIE) を呼び出していました。

そして、問題を解決するために P3P ポリシーを設定できなかった理由がわかりません...

検索中に、JSON で Cookie を機能させることについて何かを見ました。Cookieがiframeを通過しない場合、配列を通過しなくなると思ったので、試しません...

何だと思いますか。したがって、Cookie を json_encode し、ajax リクエストの後にデコードすると、取得できます!

見逃したものがあるかもしれませんが、見落としていた場合は申し訳ありませんが、これほどばかげたものを見たことはありません。セキュリティのためにサードパーティの Cookie をブロックしますが、暗号化されている場合は通過させますか? セキュリティは今どこにありますか?

この投稿が誰かの役に立てば幸いです。また、何かを見逃していて、頭がおかしい場合は、教えてください!

于 2012-12-12T18:37:56.060 に答える
0

Rails 3.2 では以下を使用しています:

class ApplicationController < ActionController::Base  

  before_filter :set_p3p  

  private  
    # for IE session cookies thru iframe  
    def set_p3p  
      headers['P3P'] = 'CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"'  
    end  
end  

これは次の場所から取得しました: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html

于 2015-06-18T20:27:11.540 に答える
0

Rails では、この gem を使用しています: https://github.com/merchii/rack-iframe 基本的に、参照ファイルなしで一連の略語を設定します: https://github.com/merchii/rack-iframe/blob/master /lib/rack/iframe.rb#L8

p3p の意味をまったく気にしない場合は、簡単にインストールできます。

于 2014-04-15T23:20:11.707 に答える
0

静的コンテンツで動作する P3P コンパクト ポリシーを取得しようとしている人:

カスタムのサーバー側応答ヘッダーを静的コンテンツとともに送信できる場合にのみ可能です。

より詳細な説明については、私の回答を参照してください: Set P3P code in HTML

于 2015-06-13T01:34:51.480 に答える