Cookie diblokir / tidak disimpan dalam IFRAME di Internet Explorer

392

Saya memiliki dua situs web, katakanlah mereka example.comdan 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.aspsebagai 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.commenggunakan sesi berbasis cookie (dan tidak ada yang bisa saya lakukan tentang hal itu), jadi tanpa cookie, process.asptidak 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.

Piskvor
sumber
solusi yang bagus memang .. saya mencoba membuat kebijakan privasi .. ditambahkan ke root konteks saya ... dan di halaman jsp saya saya mengatur header .. masih tidak bisa menghilangkan mata merah itu .. bisakah kamu membantu saya menyelesaikan masalah ..
user902490
Terima kasih untuk situs demo @Piskvor, saya mereferensikannya di sini di posting Security.SE ini yang mencantumkan situs web dengan tes browser interaktif
goodguys_activate
@ makerofthings7: YW. Saya akan memigrasikannya ke situs non-temporer (sic!) Dan akan menyarankan suntingan pada Security.se, halaman itu adalah konsep bukti yang agak membingungkan.
Piskvor meninggalkan gedung
2
Jangan repot-repot mencoba membuat P3P berjalan di Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P tidak berfungsi sama sekali, jadi apa pun yang Anda lakukan, cookie tidak akan disimpan. Bukti sini juga enhanceie.com/test/cookie
puco

Jawaban:

429

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).

mata iblis
(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):

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

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:

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

policyrefadalah URI relatif ke file Referensi Kebijakan (yang pada gilirannya merujuk kebijakan privasi), CPadalah 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 ):

  • NOI : "Situs Web tidak mengumpulkan data yang diidentifikasi." (segera setelah ada penyesuaian, login, atau pengumpulan data apa pun (***** Analytics, siapa saja?), Anda harus mengakuinya di P3P Anda)
  • STP : Informasi disimpan untuk memenuhi tujuan yang disebutkan. Ini membutuhkan informasi untuk dibuang sesegera mungkin. Situs HARUS memiliki kebijakan penyimpanan yang menetapkan tabel waktu penghancuran. Kebijakan penyimpanan HARUS dimasukkan dalam atau ditautkan dari kebijakan privasi yang dapat dibaca manusia di situs. "(Jadi jika Anda mengirim STPtetapi 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.

Piskvor
sumber
Saya 95% selesai, tetapi header saya hanya mengatakan: P3P: CP = "...." dan tidak menyertakan tautan policyref, yang membuatnya berfungsi di IE7, tetapi tidak di IE6 ... berfungsi dengan baik sekarang. Terima kasih!
AndreasKnudsen
4
Tautan ke editor IBM tidak berfungsi lagi. Melalui The Wayback Machine saya dapat menemukan tautan yang berfungsi ini: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234
34
Beberapa berita tentang topik ini: -IBM editor dapat ditemukan di: softpedia.com/get/Security/Security-Related/… -P3P standar tampaknya 'mati'. Perusahaan besar seperti google dan facebook sekarang menggunakan header P3P yang tidak valid untuk mem-bypass keamanan IE. Lihat posting ini: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/... techpolicy.com/...
Davide Icardi
7
Info lain yang dapat membantu seseorang dengan masalah serupa: dari pengujian saya jika domain berada di zona keamanan yang berbeda (misalnya pihak pertama adalah internet dan pihak ketiga adalah intranet) tidak mungkin untuk menerima cookie pihak ketiga juga jika P3P benar dikonfigurasi Cookie selalu diblokir.
Davide Icardi
1
Penting untuk dicatat bahwa istilah 'pihak ketiga' tidak sejelas yang dipikirkan orang. Jika iframe memiliki konten pihak ketiga relatif terhadap situs terlampir dan memiliki kebijakan privasi yang valid, dan itu mengarahkan ke tampilan di iframe yang berasal dari situs utama, maka kecuali jika tampilan itu memiliki kebijakan privasi yang valid, IE tidak akan percayai cookie-nya. Bahkan jika pandangan itu berasal dari situs yang sama dengan yang berisi iframe.
Tarif
168

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:

  1. Siapa peduli? Dengan kata lain, dapatkah saya digugat jika saya memasukkan kata "Potato" di header?
  2. Apa yang dilakukan perusahaan lain?

Temuan saya adalah:

  1. Tidak ada yang peduli. Saya tidak dapat menemukan satu dokumen yang menunjukkan bahwa teknologi ini memiliki bobot hukum. Selama penelitian saya, saya tidak menemukan satu negara di seluruh dunia yang telah mengadopsi undang-undang yang mencegah Anda meletakkan kata "Potato" di header P3P
  2. Google dan Facebook meletakkan tautan di bidang tajuk P3P mereka dengan merujuk pada halaman yang menjelaskan mengapa mereka tidak memiliki tajuk P3P.

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)

header('P3P: CP="Potato"');

Masalah terpecahkan, dan IE senang dengan kentang ini.

Ruben
sumber
6
Memang, masalah telah berubah secara signifikan sejak 2008, ketika ini diposting. Web telah bergerak, dan konsensus tentang P3P telah menetapkan "tidak ada yang peduli lagi." Baik untuk mengetahui apa yang dilakukan IE dengan input yang tidak valid dalam kasus ini.
Piskvor meninggalkan gedung
19
Oh man, ini salah satu permata penjelajah internet tersembunyi! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" Internet Explorer Diprogram Oleh Idiots \ ""); Yang itu bekerja untuk saya!
Michiel Cornille
6
@Mvision Jangan salahkan pengembang, ini lebih merupakan masalah yang terkait dengan pengacara dan manajemen? Saya menduga sebagian besar pengembang tidak menyadari bahwa fitur tersebut akan menghasilkan solusi seperti Potato :-)
KajMagnus
5
Untuk ASP.Net, Anda dapat menambahkan ini ke konfigurasi web Anda: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & quot; Internet Explorer Membutuhkan Ini Untuk Agar Tetapkan Cookie Pihak Ketiga & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner
1
Oh ini harus lebih tinggi! Saya menghabiskan waktu berjam-jam mencoba membuat cookie berfungsi di iframe IE 11. Mencoba segala macam kombinasi P3P dan mendapatkan berbagai hasil tergantung pada jenis cookie / kedaluwarsa. Akhirnya memasukkan PotatoP3P saya memecahkannya. ha ha!
dtbaker
55

Saya dapat membuat mata jahat pergi dengan hanya menambahkan header kecil ini ke situs di IFrame (solusi PHP):

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

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

Helo
sumber
10
IANAL, tetapi kebijakan P3P tampaknya mengikat secara hukum. Apakah Anda menyadari apa yang Anda janjikan kepada pengguna di sini, atau apakah Anda hanya mencampur tag sampai EvilEye menghilang? Saya pikir caching peramban tidak akan menjadi masalah terbesar Anda dengan ini: " NOI : Situs Web tidak mengumpulkan data yang diidentifikasi. STP : Informasi dipertahankan untuk memenuhi tujuan yang disebutkan. Ini membutuhkan informasi untuk dibuang pada waktu secepat mungkin. Situs HARUS memiliki kebijakan retensi yang menetapkan tabel waktu penghancuran. Kebijakan retensi HARUS dimasukkan dalam atau ditautkan dari kebijakan privasi yang dapat dibaca manusia. "
Piskvor meninggalkan gedung
28
Saya harus mengakui bahwa saya tidak terlalu peduli apa artinya, saya hanya perlu hal-hal untuk bekerja di Explorer. Situs-situs tersebut adalah situs non-publik milik kami, yang salah satunya menggunakan cookie untuk 'mengingat' gaya yang menunjukkan situs tersebut. Jadi, ya, saya hanya mencampur tag hingga mata jahatnya menghilang.
Helo
Menemukan entri blog yang bagus yang menjelaskan masalah di sini: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo
6
Meningkatnya relevansi P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Jika itu mengikat secara hukum, akan ada gugatan didahulukan dengan membuktikan sekarang. Itu dipandang dengan harga tinggi sehingga semua kecuali satu dari pesaing saya bahkan repot memposting satu di tempat pertama. Mereka harus mengetahui bahwa jika pelanggan mereka tidak dapat meninggalkan pengaturan IE pada Medium, mereka tidak sepadan dengan usaha. Penjualan yang hilang di satu situs harus cukup tinggi jika cookie tidak berfungsi, kereta mati tanpa mereka.
Fiasco Labs
3
Jawaban ini menyarankan menggunakan header dummy like 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 :-)
KajMagnus
21

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:

CP="my compact p3p policy"

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

CP="This site does not have a p3p policy."

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).

David Hammond
sumber
20

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).

/// <summary>
/// Privacy Preferences Project (P3P) serve a compact policy (a "p3p" HTTP header) for all requests
/// P3P provides a standard way for Web sites to communicate about their practices around the collection, 
/// use, and distribution of personal information. It's a machine-readable privacy policy that can be 
/// automatically fetched and viewed by users, and it can be tailored to fit your company's specific policies.
/// </summary>
/// <remarks>
/// More info http://www.oreillynet.com/lpt/a/1554
/// </remarks>
public class P3PAttribute : ActionFilterAttribute
{
    /// <summary>
    /// On Action Executing add a compact policy "p3p" HTTP header
    /// </summary>
    /// <param name="filterContext"></param>
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

        base.OnActionExecuting(filterContext);
    }
}

Contoh penggunaan:

[P3P]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
daniellmb
sumber
14

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

Juris
sumber
5

Siapa pun yang memiliki masalah ini di node.js.

Kemudian tambahkan modul p3p ini, dan aktifkan modul ini di middleware.

npm install p3p

Saya menggunakan express jadi saya menambahkannya di app.js

Pertama-tama membutuhkan modul itu di app.js

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

lalu gunakan sebagai middleware

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

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

Harshal_m_joshi
sumber
5

Jika ada yang mencari garis Apache; kami menggunakan yang ini.

Set header P3P "CP = \" Terima kasih IE8 \ ""

Tidak masalah apa pun nilai CP yang kami tetapkan, asalkan ada header P3P.

so_mv
sumber
4

Satu hal yang mungkin dilakukan adalah menambahkan domain ke situs yang diizinkan di alat -> opsi internet -> privasi -> situs: somedomain.com -> allow -> OK.

heikkim
sumber
23
Ya, jika Anda hanya peduli itu berfungsi di komputer Anda. Tidak sepenuhnya praktis untuk menyarankan ini kepada setiap pengunjung.
Piskvor meninggalkan gedung
3

Posting ini memberikan beberapa komentar tentang P3P dan solusi pintas yang mengurangi masalah dengan IE7 dan IE8.

Henrik Aasted Sørensen
sumber
1
Mengutip artikel: "pada dasarnya mengatakan" Kami tidak mengumpulkan data pribadi Anda "" - semoga berhasil. Saya telah melihat nol situs yang benar-benar memenuhi token yang ditetapkan dalam kebijakan itu (tidak mengumpulkan data sama sekali , bahkan data statistik anonim - log akses server, ada yang?). Kebijakan lain yang ditawarkan juga cukup sulit untuk dicapai (Anda memiliki semacam analisis web? Bam, Anda baru saja melanggar kebijakan P3P Anda). Jadi, artikel itu dapat disimpulkan sebagai "hanya berbohong terang-terangan, tidak ada yang peduli". Artikel paling bermanfaat di seluruh Internet , memang.
Piskvor meninggalkan gedung
Mengutip bagian lain dari artikel ini: "Tidak banyak informasi bagus dan gratis di internet tentang P3P, kebijakan ringkas, dan persyaratan IE7 - dan IE7 sama sekali tidak memberikan hasil debugging yang membantu seperti mengapa cookie Anda diblokir." Tampaknya ini sepenuhnya benar! Setelah menghabiskan sebagian besar hari saya untuk mencari tahu mengapa IE7 / 8 berperilaku berbeda dari setiap browser lain, saya sangat senang menemukan posting ini. Mungkin sudah waktunya untuk menyadari bahwa P3P adalah spec mati, dan bahwa kebanyakan orang lebih suka hanya bekerja di sekitarnya. Posting ini IS mungkin yang paling berguna pada subjek.
Henrik Aasted Sørensen
"Ada sangat sedikit informasi yang baik dan gratis di internet" - yang mungkin benar pada tahun 2007 (ketika itu ditulis), tetapi ada banyak informasi di Internet sekarang, bahkan alat gratis yang membantu Anda membangun kebijakan P3P menurut situasi spesifik Anda. Saya tidak membela P3P, tetapi mengatakan "eh hentikan, biarkan saja" bisa memiliki konsekuensi yang mahal (karena Anda membuat klaim yang sangat jelas tentang situs Anda). Apakah P3P sebenarnya mengikat secara hukum, bukan? Saya belum diuji (IIRC), tapi saya tidak ingin berada di pihak penerima gugatan itu.
Piskvor meninggalkan gedung
1
@Piskvor - Silakan kirim alat P3P gratis. Semua yang saya coba kunjungi telah dibeli oleh link farms dan pencarian palsu. IBM menarik alat gratis mereka. Dukungan P3P tampaknya seperti rumput mati dalam kekeringan pada tahun 2012.
Fiasco Labs
2
Menemukan editor IBM Alphaworks p3p di sini di softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs
3

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.

ripper234
sumber
1
Poin yang bagus. Perhatikan bahwa pada saat pertanyaan ini diposting, dukungan untuk penyimpanan sesi tidak ada, terutama di IE. Tapi waktu, mereka berubah;)
Piskvor meninggalkan gedung
3

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.

Frode Nilsen
sumber
Saya terkejut ini masih relevan pada tahun 2016 :)
Piskvor meninggalkan gedung
1
Status untuk P3P di IE didokumentasikan di sini: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , masa depan terlihat cerah :)
Frode Nilsen
2

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!

Joel Mitchell
sumber
1

Anda juga dapat menggabungkan file p3p.xml dan policy.xml seperti:

/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>

Saya menemukan cara termudah untuk menambahkan header adalah proxy melalui Apache dan menggunakan mod_headers, seperti:

<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>

Jadi kami proksi semua permintaan kecuali yang ke /w3c/p3p.xml ke server aplikasi kami.

Anda dapat menguji semuanya dengan validator W3C

Keris
sumber
Apakah ini mengirim header dengan 304 permintaan? Beberapa versi IE akan benar-benar menghapus cookie jika Anda mengirim header P3P dengan 304.
Joshua
Maaf, saya tidak tahu karena saya tidak lagi mengerjakan kode ini. Jika ini masalah, Anda mungkin dapat memaksa kode status di Apache menjadi 200.
Kris
1

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).

Matius
sumber
1

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!

pierreaurelemartin
sumber
Menarik ... jadi Anda mendekode cookie di JS?
Piskvor meninggalkan gedung
Tidak, saya hanya menulis cookie dalam array JSON dengan fungsi php json_encode () kemudian kembali melalui panggilan JSON ajax.
pierreaurelemartin
1

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

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Cukup kirim tajuk tambahan:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Konten p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Konten file policy.html saya

<html>
<head>
<STYLE type="text/css">
title { color: #3333FF}
</STYLE>
<title>Privacy Statement for YOUR COMPANY NAME</title>
</head>
<body>
<h1 class="title">Privacy Policy</h1>
<!-- "About Us" section of privacy policy -->
<h2>About Us</h2>
<p>This is a privacy policy for YOUR COMPANY NAME.
Our homepage on the Web is located at <a href="YOURWEBSITE">
YOURWEBSITE</a>.
The full text of our privacy policy is available on the Web at 
<a href="ABSOLUTE URL OF THIS FILE">
ABSOLUTE URL OF THIS FILE</a>
This policy does not tell users where they can go to exercise their opt-in or opt-out options.
<p>We invite you to contact us if you have questions about this policy.
You may contact us by mail at the following address:
<pre>FIRSTNAME LASTNAME
YOUR ADDRESS HERE
</pre>
<p>You may contact us by e-mail at 
<a href="mailto:[email protected]">
[email protected]</a>. 
You may call us at TELEPHONENUMBER.
<!-- "Privacy Seals" section of privacy policy -->
<h2>Dispute Resolution and Privacy Seals</h2>
<p>We have the following privacy seals and/or dispute resolution mechanisms.
If you think we have not followed our privacy policy in some way, they can help you resolve your concern.
<ul>
<li>
<b>Dispute</b>:
Contact us for further information
</ul>
<!-- "Additional information" section of privacy policy -->
<h2>Additional Information</h2>
<p>
This policy is valid for 1 day from the time that it is loaded by a client.
</p>
<!-- "Data Collection" section of privacy policy -->
<h2>Data Collection</h2>
<p>P3P policies declare the data they collect in groups (also referred to as "statements").
This policy contains 1 data group.
<hr width="50%" align="center">
<h3>Group "App control data"</h3>
<p>We collect the following information:
<ul>
<li>HTTP cookies</li>
</ul>
<p>This data will be used for the following purposes:</p>
<ul>
<li>Completion and support of the current activity.</li>
<li>Web site and system administration.</li>
<li>Research and development.</li>
<li>Historical preservation.</li>
<li>Other purposes<p>Control Flow of the application</p></li>
</ul>
<p>This data will be used by ourselves and our agents.
<p>The data in this group has been marked as non-identifiable. This means that there is no
reasonable way for the site to identify the individual person this data was collected from.
<p>The following explanation is provided for why this data is collected:</p>
<blockquote>This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</blockquote>
<!-- "Use of Cookies" section of privacy policy -->
<hr width="50%" align="center">
<h2>Cookies</h2>
<p>Cookies are a technology which can be used to provide you with tailored information from a Web site. A cookie is an element of data that a Web site can send to your browser, which may then store it on your system. You can set your browser to notify you when you receive a cookie, giving you the chance to decide whether to accept it.
<p>Our site makes use of cookies.
Cookies are used for the following purposes:
<ul>
<li>Site administration
<li>Completing the user's current activity
<li>Research and development
<li>Other
(Control Flow of the application)
</ul>
<!-- "Compact Policy Explanation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Compact Policy Summary</h2>
<p>The compact policy which corresponds to this policy is:
<pre>
    CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV"
</pre>
<p>The following table explains the meaning of each field in the compact policy.
<center><table width="80%" border="1" cols="2">
<tr><td align="center" valign="top" width="20%"><b>Field</b></td><td align="center" valign="top" width="80%"><b>Meaning</b></td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CP=</tt></td>
<td align="left" valign="top" width="80%">This is the compact policy header; it indicates that what follows is a P3P compact policy.</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ALL</tt></td>
<td align="left" valign="top" width="80%">
Access to all collected information is available.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DSP</tt></td>
<td align="left" valign="top" width="80%">
The policy contains at least one dispute-resolution mechanism.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NID</tt></td>
<td align="left" valign="top" width="80%">
The information collected is not personally identifiable.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>CURa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for completion of the current activity.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>ADMa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for site administration.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>DEVa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for research and development.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>HISa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for historical archival purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OTPa</tt></td>
<td align="left" valign="top" width="80%">
The data is used for other purposes.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>OUR</tt></td>
<td align="left" valign="top" width="80%">
The data is given to ourselves and our agents.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NOR</tt></td>
<td align="left" valign="top" width="80%">
The data is not kept beyond the current transaction.
</td></tr>
<tr><td align="left" valign="top" width="20%"><tt>NAV</tt></td>
<td align="left" valign="top" width="80%">
Navigation and clickstream data is collected.
</td></tr>
</table></center>
<p>The compact policy is sent by the Web server along with the cookies it describes.
For more information, see the P3P deployment guide at <a href="http://www.w3.org/TR/p3pdeployment">http://www.w3.org/TR/p3pdeployment</a>.
<!-- "Policy Evaluation" section of privacy policy -->
<hr width="50%" align="center">
<h2>Policy Evaluation</h2>
<p>Microsoft Internet Explorer 6 will evaluate this policy's compact policy whenever it is used with a cookie.
The actions IE will take depend on what privacy level the user has selected in their browser (Low, Medium, Medium High, or High; the default is Medium.
In addition, IE will examine whether the cookie's policy is considered satisfactory or unsatisfactory, whether the cookie is a session cookie or a persistent cookie, and whether the cookie is used in a first-party or third-party context.
This section will attempt to evaluate this policy's compact policy against Microsoft's stated behavior for IE6.
<p><b>Note:</b> this evaluation is currently experimental and should not be considered a substitute for testing with a real Web browser.
<p><b>Satisfactory policy</b>: this compact policy is considered <em>satisfactory</em> according to the rules defined by Internet Explorer 6.
IE6 will accept cookies accompanied by this policy under the High, Medium High, Medium, Low, and Accept All Cookies settings.
</body></html>

  1. Konten kebijakan.p3p
<?xml version="1.0"?>
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1">
    <!-- Generated by IBM P3P Policy Editor version Beta 1.12 built 2/27/04 1:19 PM -->

    <!-- Expiry information for this policy -->
    <EXPIRY max-age="86400"/>

<POLICY
    name="App"
    discuri="ABSOLUTE URL TO policy.html"
    xml:lang="de">
    <!-- Description of the entity making this policy statement. -->
    <ENTITY>
    <DATA-GROUP>
<DATA ref="#business.name">COMPANY NAME</DATA>
<DATA ref="#business.contact-info.online.email">[email protected]</DATA>
<DATA ref="#business.contact-info.online.uri">YOURWEBSITE</DATA>
<DATA ref="#business.contact-info.telecom.telephone.number">YOURPHONENUMBER</DATA>
<DATA ref="#business.contact-info.postal.organization">FIRSTNAME LASTNAME</DATA>
<DATA ref="#business.contact-info.postal.street">STREET</DATA>
<DATA ref="#business.contact-info.postal.city">CITY</DATA>
<DATA ref="#business.contact-info.postal.stateprov">STAGE</DATA>
<DATA ref="#business.contact-info.postal.postalcode">POSTALCODE</DATA>
<DATA ref="#business.contact-info.postal.country">Germany</DATA>
    </DATA-GROUP>
    </ENTITY>

    <!-- Disclosure -->
    <ACCESS><all/></ACCESS>


    <!-- Disputes -->
    <DISPUTES-GROUP>
        <DISPUTES resolution-type="service" service="YOURWEBSITE CONTACT FORM" short-description="Dispute">
            <LONG-DESCRIPTION>Contact us for further information</LONG-DESCRIPTION>
    <!-- No remedies specified -->
        </DISPUTES>
    </DISPUTES-GROUP>

    <!-- Statement for group "App control data" -->
    <STATEMENT>
        <EXTENSION optional="yes">
            <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="App control data"/>
        </EXTENSION>

    <!-- Consequence -->
    <CONSEQUENCE>
This cookie data is only used to control the application within an iframe (e.g. a Facebook App)</CONSEQUENCE>

    <!-- Data in this statement is marked as being non-identifiable -->
    <NON-IDENTIFIABLE/>

    <!-- Use (purpose) -->
    <PURPOSE><admin/><current/><develop/><historical/><other-purpose>Control Flow of the application</other-purpose></PURPOSE>

    <!-- Recipients -->
    <RECIPIENT><ours/></RECIPIENT>

    <!-- Retention -->
    <RETENTION><no-retention/></RETENTION>

    <!-- Base dataschema elements. -->
    <DATA-GROUP>
    <DATA ref="#dynamic.cookies"><CATEGORIES><navigation/></CATEGORIES></DATA>
    </DATA-GROUP>
</STATEMENT>

<!-- End of policy -->
</POLICY>
</POLICIES>
Sebastian Buckpesch
sumber
Ia pergi ke dir server jendela induk atau dir server iframe?
JackTheKnife
0

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

Sly_cardinal
sumber
-1

Solusi yang lebih baik adalah dengan melakukan panggilan Ajax di dalam iframe ke halaman yang akan mendapatkan / mengatur cookie ...

Luca Matteis
sumber
1
AJAX tidak akan membantu di sini: setiap Cookie penanganan dalam iframe kurang dipercaya ( "cookie pihak ketiga"), dan di IE perlu melewati filter Kebijakan Privasi - tidak peduli apakah Anda sedang cookie pengaturan dengan AJAX panggilan, dokumen manipulasi .cookie atau melalui halaman normal (diuji).
Piskvor meninggalkan gedung
tidak, jika Anda membuat panggilan ajax yang mengatur cookie dengan HTTP (di dalam iframe) Ie6 mengabaikan kebijakan keamanan dan mengatur cookie. Harap pastikan solusi saya salah sebelum downvoting.
Luca Matteis
Lihat newmoon.wz.cz/test/page.php . Anda dapat mengatur cookie melalui AJAX, tetapi Anda juga a) memulai sesi baru, atau b) mengatur id sesi dari JS - lubang keamanan besar (XSRF). Komentar saya sebelumnya adalah salah, saya minta maaf. Tapi, solusi Anda terlihat lebih salah dari sebelumnya: membuat lubang keamanan tampak buruk bagi saya.
Piskvor meninggalkan gedung
(Apa pun yang "mem-bypass kebijakan keamanan" terlihat setidaknya seperti bug bagi saya - jika ada kebijakan, itu ada karena beberapa alasan. Mengatakan "mengacaukan kebijakan keamanan / preferensi pengguna, kami tahu lebih baik" adalah lereng licin yang berbahaya. Juga , akan Anda membiarkan fungsi tergantung pada (belum) tidak tetap bug dikenal)?
Piskvor meninggalkan gedung
Tetapkan sesi baru? Apa yang kamu bicarakan? Sebagian besar browser mendukung ini, tanpa hal-hal tajuk p3p, jadi saya tidak mengerti bagaimana melakukannya melalui Ajax berbeda ...
Luca Matteis