Saya memiliki dua situs web, katakanlah mereka example.com
dan anotherexample.net
. Pada anotherexample.net/page.html
, saya punya IFRAME SRC="http://example.com/someform.asp"
. IFRAME itu menampilkan formulir untuk diisi dan dikirim oleh pengguna http://example.com/process.asp
. Saat saya membuka formulir (" someform.asp
") di jendela perambannya sendiri, semuanya berfungsi dengan baik. Namun, ketika saya memuat someform.asp
sebagai IFRAME di IE 6 atau IE 7, cookie untuk example.com tidak disimpan. Di Firefox masalah ini tidak muncul.
Untuk tujuan pengujian, saya telah membuat pengaturan serupa di http://newmoon.wz.cz/test/page.php .
example.com
menggunakan sesi berbasis cookie (dan tidak ada yang bisa saya lakukan tentang hal itu), jadi tanpa cookie, process.asp
tidak akan dijalankan. Bagaimana cara memaksa IE untuk menyimpan cookie itu?
Hasil mengendus lalu lintas HTTP: pada respons GET / formome.asp, ada tajuk Set-Cookie Cookie per-sesi (mis. Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
), Tetapi pada permintaan POST /process.asp, tidak ada header Cookie sama sekali.
Sunting3: beberapa skrip sisi server AJAX + tampaknya mampu menghindari masalah, tapi itu terlihat sangat mirip bug, plus itu membuka serangkaian lubang keamanan baru . Saya tidak ingin aplikasi saya menggunakan kombinasi bug + lubang keamanan hanya karena mudah.
Sunting: kebijakan P3P adalah penyebab utama , penjelasan lengkap di bawah ini.
sumber
Jawaban:
Saya berhasil, tetapi solusinya agak rumit, jadi bersabarlah.
Apa yang terjadi
Karena itu, Internet Explorer memberikan tingkat kepercayaan yang lebih rendah ke halaman IFRAME (IE menyebut konten "pihak ketiga" ini). Jika halaman di dalam IFRAME tidak memiliki Kebijakan Privasi, cookie-nya diblokir (yang ditunjukkan oleh ikon mata di bilah status, ketika Anda mengkliknya, itu menunjukkan kepada Anda daftar URL yang diblokir).
(sumber: piskvor.org )
Dalam hal ini, ketika cookie diblokir, pengidentifikasi sesi tidak dikirim, dan skrip target melempar kesalahan 'sesi tidak ditemukan'.
(Saya sudah mencoba mengatur pengidentifikasi sesi ke dalam formulir dan memuatnya dari variabel POST. Ini akan berhasil , tetapi karena alasan politik saya tidak bisa melakukan itu.)
Dimungkinkan untuk membuat halaman di dalam IFRAME lebih tepercaya: jika halaman dalam mengirim header P3P dengan kebijakan privasi yang dapat diterima oleh IE, cookie akan diterima .
Bagaimana mengatasinya
Buat kebijakan p3p
Titik awal yang baik adalah tutorial W3C . Saya telah mengalaminya, mengunduh Editor Kebijakan Privasi IBM dan di sana saya membuat representasi kebijakan privasi dan memberinya nama untuk referensi dengan (ini dia
policy1
).CATATAN : pada titik ini, Anda benar-benar perlu mencari tahu apakah situs Anda memiliki kebijakan privasi, dan jika tidak, buatlah - apakah itu mengumpulkan data pengguna, jenis data apa, apa yang dilakukan dengan itu, siapa yang memiliki akses ke sana, dll. Anda perlu menemukan informasi ini dan memikirkannya . Hanya dengan menampar beberapa tag saja tidak akan memotongnya. Langkah ini tidak dapat dilakukan sepenuhnya dalam perangkat lunak, dan mungkin sangat politis (misalnya "haruskah kami menjual statistik klik kami?").
(mis. "situs dioperasikan oleh ACME Ltd., ia menggunakan pengidentifikasi per-sesi anonim untuk operasinya, mengumpulkan data pengguna hanya jika diizinkan secara eksplisit dan hanya untuk tujuan berikut ini, data disimpan hanya selama diperlukan, hanya perusahaan kami memiliki akses ke sana, dll. ").
(Saat mengedit dengan alat ini, ada kemungkinan untuk melihat kesalahan / kelalaian dalam kebijakan. Juga sangat berguna adalah tab "Kebijakan HTML": di bagian bawah, ia memiliki "Evaluasi Kebijakan" - pemeriksaan cepat jika kebijakan akan diblokir oleh pengaturan default IE)
Editor mengekspor ke file .p3p, yang merupakan representasi XML dari kebijakan di atas. Selain itu, ia dapat mengekspor "versi ringkas" dari kebijakan ini.
Tautan ke kebijakan
Kemudian diperlukan file Referensi Kebijakan (
http://example.com/w3c/p3p.xml
) (indeks kebijakan privasi yang digunakan situs):The
<INCLUDE>
menunjukkan semua URI yang akan menggunakan kebijakan ini (dalam kasus saya, seluruh situs). File kebijakan yang saya ekspor dari Editor telah diunggah kehttp://example.com/w3c/example-com.p3p
Kirim tajuk ringkas dengan tanggapan
Saya telah menetapkan server web di example.com untuk mengirim header ringkas dengan tanggapan, seperti ini:
policyref
adalah URI relatif ke file Referensi Kebijakan (yang pada gilirannya merujuk kebijakan privasi),CP
adalah representasi kebijakan yang ringkas. Perhatikan bahwa kombinasi header P3P dalam contoh ini mungkin tidak berlaku di situs web spesifik Anda; header P3P Anda HARUS dengan jujur mewakili kebijakan privasi Anda sendiri!Keuntungan!
Dalam konfigurasi ini, Mata Jahat tidak muncul, cookie disimpan bahkan di IFRAME, dan aplikasi berfungsi.
Sunting: Apa yang TIDAK harus dilakukan, kecuali Anda suka membela dari tuntutan hukum
Beberapa orang menyarankan "cukup tampar beberapa tag ke header P3P Anda, hingga Evil Eye menyerah".
Tag tidak hanya sekelompok bit, mereka memiliki makna dunia nyata , dan penggunaannya memberi Anda tanggung jawab dunia nyata !
Misalnya, berpura-pura bahwa Anda tidak pernah mengumpulkan data pengguna mungkin membuat browser senang, tetapi jika Anda benar-benar mengumpulkan data pengguna, P3P bertentangan dengan kenyataan. Sederhana dan sederhana, Anda sengaja berbohong kepada pengguna Anda , dan itu mungkin merupakan perilaku kriminal di beberapa negara. Seperti dalam, "masuk penjara, jangan kumpulkan $ 200".
Beberapa contoh ( lihat penulis p3 untuk set lengkap tag ):
STP
tetapi tidak memiliki kebijakan penyimpanan, Anda mungkin melakukan penipuan. Seberapa keren itu? Tidak sama sekali.)Saya bukan pengacara, tapi saya tidak mau pergi ke pengadilan untuk melihat apakah header P3P benar - benar mengikat secara hukum atau jika Anda dapat menjanjikan apa pun kepada pengguna Anda tanpa benar-benar mau menghormati janji Anda.
sumber
Saya telah menghabiskan sebagian besar hari saya untuk melihat hal P3P ini dan saya merasa perlu untuk membagikan apa yang saya temukan.
Saya perhatikan bahwa konsep P3P sangat ketinggalan jaman dan tampaknya hanya benar-benar digunakan / diberlakukan oleh Internet Explorer (IE).
Penjelasan paling sederhana adalah: IE ingin Anda menentukan header P3P jika Anda menggunakan cookie.
Ini adalah ide yang bagus, dan untungnya sebagian besar waktu tidak memberikan tajuk ini tidak akan menyebabkan masalah (baca peringatan peramban). Kecuali jika situs web / aplikasi web Anda dimuat ke situs web lain menggunakan (i) Frame. Di sinilah IE menjadi sangat menyakitkan di pelacur. Itu tidak akan memungkinkan Anda untuk mengatur cookie kecuali header P3P diatur.
Mengetahui hal ini saya ingin menemukan jawaban untuk dua pertanyaan berikut:
Temuan saya adalah:
Konsep ini lahir pada tahun 2002 dan membuat saya bingung bahwa konsep yang usang dan tidak diterapkan secara hukum ini masih dipaksakan pada pengembang di dalam IE. Jika tajuk ini tidak memiliki konsekuensi hukum apa pun tajuk ini harus diabaikan (atau sebagai alternatif, buat peringatan atau pemberitahuan di konsol). Tidak dipaksakan! Saya sekarang terpaksa memasukkan baris dalam kode saya (dan mengirim header ke klien) yang tidak melakukan apa pun.
Singkatnya - untuk membuat IE senang - tambahkan baris berikut ke kode PHP Anda (Bahasa lain akan terlihat serupa)
Masalah terpecahkan, dan IE senang dengan kentang ini.
sumber
Potato
P3P saya memecahkannya. ha ha!Saya dapat membuat mata jahat pergi dengan hanya menambahkan header kecil ini ke situs di IFrame (solusi PHP):
Ingatlah untuk menekan ctrl + F5 untuk memuat ulang situs Anda atau Explorer mungkin masih menunjukkan mata jahat, meskipun faktanya itu berfungsi dengan baik. Ini mungkin alasan utama mengapa saya punya banyak masalah untuk membuatnya bekerja.
Tidak ada file kebijakan yang diperlukan sama sekali.
Sunting: Saya menemukan entri blog yang bagus yang menjelaskan masalah cookie di IFrames. Ini juga memiliki perbaikan cepat dalam kode C #: Bingkai, Halaman ASPX dan Cookie yang Ditolak
sumber
CP="This_is_not_a_privacy_policy"
. Melakukan hal itu tampaknya kurang mengikat secara hukum, saya pikir (karena misalnya NOI dan STP dan tidak ada yang seperti itu disebutkan), dan tampaknya membuat IE senang :-)Ini terkubur di komentar jawaban lain, tapi saya hampir melewatkannya, jadi sepertinya itu layak untuk dijawab sendiri.
Untuk meninjau: agar IE menerima cookie pihak ke-3, Anda perlu menyajikan file Anda dengan header http yang disebut p3p dalam format:
TETAPI, p3p hampir mati sebagai standar pada saat ini dan Anda dapat dengan mudah membuat IE bekerja tanpa menginvestasikan waktu dan sumber daya hukum dalam membuat kebijakan p3p nyata. Ini karena jika tajuk kebijakan p3p ringkas Anda tidak valid, IE sebenarnya memperlakukannya sebagai kebijakan yang baik dan menerima cookie pihak ke-3. Jadi Anda bisa menggunakan header p3p seperti ini
Anda dapat menyertakan tautan ke halaman yang menjelaskan mengapa Anda tidak memiliki kebijakan p3p, seperti yang dilakukan Google dan Facebook (mereka tunjukkan di sini: https://support.google.com/accounts/answer/151657 dan di sini: https : //www.facebook.com/help/327993273962160/ ).
Akhirnya, penting untuk dicatat bahwa semua file yang dilayani dari situs pihak ke-3 harus memiliki header p3p, bukan hanya yang mengatur cookie, jadi Anda mungkin tidak dapat melakukan ini hanya di PHP, asp.net, dll. kode. Anda mungkin lebih baik mengatur di tingkat server web (yaitu di IIS atau Apache).
sumber
Saya memiliki masalah ini juga, berpikir saya akan memposting kode yang saya gunakan dalam proyek MVC2 saya. Berhati-hatilah saat dalam siklus hidup halaman yang Anda tambahkan di header atau Anda akan mendapatkan HttpException " Server tidak dapat menambahkan header setelah header HTTP telah dikirim ." Saya menggunakan ActionFilterAttribute kustom pada metode OnActionExecuting (dipanggil sebelum tindakan dijalankan).
Contoh penggunaan:
sumber
Ini adalah topik yang bagus tentang masalah ini, namun saya menemukan bahwa satu detail penting (yang penting setidaknya dalam kasus saya) yang tidak diposting di sini atau di tempat lain (saya minta maaf jika saya melewatkannya) adalah bahwa baris P3P harus dikirimkan dalam header file SETIAP yang dikirim dari server pihak ke-3, bahkan file tidak menyetel atau menggunakan cookie seperti file Javascript atau gambar. Kalau tidak, cookie akan diblokir. Saya memiliki lebih banyak tentang ini dalam sebuah posting di sini: http://posheika.net/?p=110
sumber
Siapa pun yang memiliki masalah ini di node.js.
Kemudian tambahkan modul p3p ini, dan aktifkan modul ini di middleware.
Saya menggunakan express jadi saya menambahkannya di app.js
Pertama-tama membutuhkan modul itu di app.js
lalu gunakan sebagai middleware
Ini akan menambahkan header p3p di objek res. Tidak perlu melakukan hal-hal tambahan.
Anda akan mendapatkan info lebih lanjut di:
https://github.com/troygoode/node-p3p
sumber
Jika ada yang mencari garis Apache; kami menggunakan yang ini.
Tidak masalah apa pun nilai CP yang kami tetapkan, asalkan ada header P3P.
sumber
Satu hal yang mungkin dilakukan adalah menambahkan domain ke situs yang diizinkan di alat -> opsi internet -> privasi -> situs: somedomain.com -> allow -> OK.
sumber
Posting ini memberikan beberapa komentar tentang P3P dan solusi pintas yang mengurangi masalah dengan IE7 dan IE8.
sumber
Salah satu solusi yang belum saya lihat disebutkan di sini, adalah menggunakan penyimpanan sesi, bukan cookie. Tentu saja ini mungkin tidak sesuai dengan persyaratan semua orang, tetapi untuk beberapa kasus ini adalah perbaikan yang mudah.
sumber
Saya sedang menyelidiki masalah ini sehubungan dengan login-off melalui Layanan Kontrol Akses Azure, dan tidak dapat menghubungkan kepala dan ekor apa pun.
Kemudian, tersandung posting ini https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/
Singkatnya, IE tidak membagikan cookie di seluruh zona (mis. Internet vs. Situs tepercaya).
Jadi, jika target IFrame Anda dan halaman html berada di P3P zona yang berbeda tidak akan membantu apa pun.
sumber
Punya masalah yang sama, juga pergi untuk menyelidiki bagaimana membuat kebijakan P3P pagi ini, di sini adalah posting saya tentang bagaimana membuat kebijakan Anda sendiri dan digunakan di situs web :) http://everydayopenslikeaflower.blogspot.com/2009/08/ cara-membuat-p3p-kebijakan-dan-implement.html
sumber
Saya telah menerapkan kebijakan P3P penuh sebelumnya tetapi tidak ingin melalui kerumitan lagi untuk proyek baru yang saya kerjakan. Saya menemukan tautan ini berguna untuk solusi sederhana untuk masalah ini, hanya harus menentukan kebijakan P3P kompak minimal "CAO PSA OUR":
http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html
Artikel ini mengutip tautan (sekarang rusak) ke artikel Microsoft kb. Kebijakan itu membantu saya!
sumber
Anda juga dapat menggabungkan file p3p.xml dan policy.xml seperti:
/home/ubuntu/sites/shared/w3c/p3p.xml
Saya menemukan cara termudah untuk menambahkan header adalah proxy melalui Apache dan menggunakan mod_headers, seperti:
Jadi kami proksi semua permintaan kecuali yang ke /w3c/p3p.xml ke server aplikasi kami.
Anda dapat menguji semuanya dengan validator W3C
sumber
Jika Anda memiliki domain yang perlu disematkan , maka Anda bisa, sebelum memanggil halaman yang menyertakan IFrame, mengalihkan ke domain itu, yang akan membuat cookie dan mengarahkan kembali, seperti dijelaskan di sini: http: //www.mendoweb. menjadi / blog / internet-explorer-safari-pihak ketiga-cookie-masalah /
Ini akan berfungsi untuk Internet Explorer tetapi juga untuk Safari (karena Safari juga memblokir cookie pihak ketiga).
sumber
Saya tahu ini agak terlambat untuk memberikan kontribusi saya pada subjek ini tetapi saya kehilangan banyak waktu sehingga mungkin jawaban ini akan membantu seseorang.
Saya mencoba untuk memanggil cookie pihak ketiga di situs saya dan tentu saja itu tidak berfungsi di Internet Explorer 10, bahkan pada tingkat keamanan yang rendah ... jangan tanya kenapa. Di iframe saya menelepon read_cookie.php (echo $ _COOKIE) dengan ajax.
Dan saya tidak tahu mengapa saya tidak mampu menetapkan kebijakan P3P untuk menyelesaikan masalah ...
Selama pencarian saya, saya melihat sesuatu tentang membuat cookie di JSON berfungsi. Saya bahkan tidak mencoba karena saya pikir jika cookie tidak akan melewati iframe, itu tidak akan melewati array ...
Coba tebak, itu benar! Jadi jika Anda json_encode cookie Anda kemudian decode setelah permintaan ajax Anda, Anda akan mendapatkannya!
Mungkin ada sesuatu yang saya lewatkan dan jika saya lakukan, semua permintaan maaf saya, tetapi saya tidak pernah melihat sesuatu yang begitu bodoh. Memblokir cookie pihak ketiga untuk keamanan, mengapa tidak, tetapi biarkan lewat jika disandikan? Di mana keamanan sekarang?
Saya harap posting ini akan membantu seseorang dan lagi, jika saya melewatkan sesuatu dan saya bodoh, tolong dididik saya!
sumber
Ini akhirnya bekerja untuk saya (setelah banyak tergesa-gesa dan menghasilkan beberapa kebijakan menggunakan pembuat kebijakan IBM). Anda dapat mengunduh down pembuat kebijakan di sini: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml
Saya tidak lagi dapat mengunduh generator dari situs web resmi IBM.
Saya membuat file-file ini di folder root dari Web-App saya
sumber
Di Rails, saya menggunakan permata ini: https://github.com/merchii/rack-iframe Secara default, set sekumpulan singkatan tanpa file referensi: https://github.com/merchii/rack-iframe/blob/master /lib/rack/iframe.rb#L8
Sangat mudah untuk menginstal ketika Anda tidak peduli sama sekali tentang arti dari hal-hal p3p.
sumber
Bagi siapa pun yang mencoba agar Kebijakan P3P Compact berfungsi dengan konten statis:
Ini hanya mungkin jika Anda dapat mengirim header respons sisi server khusus dengan konten statis.
Untuk penjelasan lebih rinci lihat jawaban saya di sini: Tetapkan kode P3P dalam HTML
sumber
Di Rails 3.2 saya menggunakan:
Saya mendapatkan ini dari: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html
sumber
Solusi yang lebih baik adalah dengan melakukan panggilan Ajax di dalam iframe ke halaman yang akan mendapatkan / mengatur cookie ...
sumber