example.com
私にはとという 2 つの Web サイトがありますanotherexample.net
。 にはanotherexample.net/page.html
がありますIFRAME SRC="http://example.com/someform.asp"
。その IFRAME は、ユーザーが入力して に送信するフォームを表示します。フォーム (" ") を独自のブラウザ ウィンドウでhttp://example.com/process.asp
開くと、すべて正常に動作します。ただし、IE 6 または IE 7 で IFRAME として読み込むと、example.com の Cookie が保存されません。Firefoxではこの問題は発生しません。someform.asp
someform.asp
テスト目的で、同様の設定を作成しましたhttp://newmoon.wz.cz/test/page.php。
example.com
クッキーベースのセッションを使用します (これについては何もできません)。そのため、クッキーがないとprocess.asp
実行されません。IEにこれらのクッキーを強制的に保存させるにはどうすればよいですか?
HTTP トラフィックをスニッフィングした結果: GET /someform.asp 応答には有効なセッションごとの Set-Cookie ヘッダー (例Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
) がありますが、POST /process.asp 要求には Cookie ヘッダーがまったくありません。
編集3: AJAX+サーバーサイドスクリプトでこの問題を回避できるようですが、これはバグのように見えますし、まったく新しい問題も発生します。セキュリティホール簡単だからという理由だけで、アプリケーションでバグとセキュリティ ホールの組み合わせを使用することは望ましくありません。
編集: P3P ポリシーが根本的な原因でした。詳細は以下を参照してください。
ベストアンサー1
動作させることはできましたが、解決方法が少し複雑なので、ご容赦ください。
何が起こっていますか
現状では、Internet Explorer は IFRAME ページ (IE ではこれを「サードパーティ」コンテンツと呼びます) に低いレベルの信頼を与えます。IFRAME 内のページにプライバシー ポリシーがない場合、そのページの Cookie はブロックされます (これはステータス バーの目のアイコンで示され、それをクリックすると、ブロックされた URL のリストが表示されます)。
(ソース:piskvor.org)
この場合、Cookie がブロックされると、セッション識別子は送信されず、ターゲット スクリプトは「セッションが見つかりません」というエラーをスローします。
(フォームにセッション識別子を設定し、POST 変数からロードしようとしました。これは機能したはずですが、政治的な理由でそれができませんでした。)
IFRAME 内のページの信頼性を高めることができます。内部ページが IE に受け入れられるプライバシー ポリシーを含む P3P ヘッダーを送信すると、Cookie が受け入れられます。
解決方法
P3Pポリシーを作成する
良い出発点はW3C チュートリアル私はそれを読み、ダウンロードしましたIBM プライバシーポリシー編集者そこで、プライバシー ポリシーの表現を作成し、参照するための名前を付けました (ここでは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>
このポリシーを使用するすべてのURIが<INCLUDE>
表示されます(私の場合はサイト全体)。エディタからエクスポートしたポリシーファイルは、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 ヘッダーは、独自のプライバシー ポリシーを正確に表現する必要があります。
利益!
この構成では、Evil Eye は表示されず、IFRAME 内にも Cookie が保存され、アプリケーションが動作します。
編集: 訴訟から身を守るのが好きでない限り、してはいけないこと
何人かの人が「Evil Eye が諦めるまで、P3P ヘッダーにいくつかのタグを貼り付けるだけ」と提案しています。
タグは単なるビットの集まりではなく、現実世界での意味を持ち、それを使用することで現実世界での責任が与えられます。
たとえば、ユーザー データをまったく収集しないふりをすると、ブラウザーは満足するかもしれませんが、実際にユーザー データを収集すると、P3P は現実と矛盾します。簡単に言えば、意図的にユーザーを欺いていることになります。これは、一部の国では犯罪行為となる可能性があります。「200 ドルを徴収しないと刑務所行き」のように。
いくつかの例(タグの完全なセットについてはp3pwriterを参照してください。):
- NOI : 「Web サイトは識別されたデータを収集しません。」 (カスタマイズ、ログイン、またはデータ収集 (***** Analytics など) がある場合は、P3P でそれを承認する必要があります)
- STP : 情報は、明示された目的を満たすために保持されます。このため、情報は可能な限り早期に破棄する必要があります。サイトには、破棄のタイム テーブルを確立する保持ポリシーが必要です。保持ポリシーは、サイトの人間が読めるプライバシー ポリシーに含まれているか、そこからリンクされている必要があります。" (つまり、送信して
STP
も保持ポリシーがない場合は、詐欺行為を行っている可能性があります。これはすごいことですよね? まったくそんなことはありません。)
私は弁護士ではありませんが、P3P ヘッダーが本当に法的に拘束力があるかどうか、または実際に約束を守る意思がないのにユーザーに何かを約束できるかどうかを確認するために法廷に行くつもりはありません。