Cookie bloccato / non salvato in IFRAME in Internet Explorer


392

Ho due siti Web, diciamo che sono example.come anotherexample.net. Su anotherexample.net/page.html, ho un IFRAME SRC="http://example.com/someform.asp". Che IFRAME visualizza un modulo per l'utente da compilare e inviare http://example.com/process.asp. Quando apro il modulo (" someform.asp") nella sua finestra del browser, tutto funziona bene. Tuttavia, quando carico someform.aspcome IFRAME in IE 6 o IE 7, i cookie per esempio.com non vengono salvati. In Firefox questo problema non appare.

A scopo di test, ho creato un'impostazione simile su http://newmoon.wz.cz/test/page.php .

example.comutilizza sessioni basate su cookie (e non c'è nulla che io possa fare al riguardo), quindi senza i cookie process.aspnon verrà eseguito. Come posso forzare IE a salvare quei cookie?

Risultati dell'annullamento del traffico HTTP: sulla risposta GET /someform.asp, esiste un'intestazione Set-Cookie valida per sessione (ad es. Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), Ma sulla richiesta POST /process.asp non esiste alcuna intestazione Cookie.

Edit3: alcuni scripting lato server AJAX + sono apparentemente in grado di eludere il problema, ma sembra molto simile a un bug, inoltre apre una nuova serie di falle di sicurezza . Non voglio che le mie applicazioni utilizzino una combinazione di bug + buca di sicurezza solo perché è facile.

Modifica: la politica P3P era la causa principale , spiegazione completa di seguito.


una buona soluzione davvero .. ho provato a creare l'informativa sulla privacy .. aggiunta alla mia root di contesto ... e nella mia pagina jsp sto impostando l'intestazione .. ancora non riesco a liberarmi di quell'occhio rosso .. puoi aiutare
sto


@ makerofthings7: YW. Lo migrerò su un sito non temporaneo (sic!) E suggerirò una modifica su Security.se, quella pagina era una prova di concetto alquanto confusa.
Piskvor lasciò l'edificio il

2
Non preoccuparti di provare a far funzionare P3P in Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P non funziona affatto, quindi qualunque cosa tu faccia, i cookie non verranno memorizzati. Prova qui pure Enhanie.com/test/cookie
puco

Risposte:


429

Ho funzionato, ma la soluzione è un po 'complessa, quindi abbi pazienza.

Cosa sta succedendo

Allo stato attuale, Internet Explorer offre un livello di fiducia inferiore alle pagine IFRAME (IE chiama questo contenuto "di terze parti"). Se la pagina all'interno di IFRAME non ha una politica sulla privacy, i suoi cookie sono bloccati (che è indicato dall'icona a forma di occhio nella barra di stato, quando fai clic su di essa, ti mostra un elenco di URL bloccati).

il malocchio
(fonte: piskvor.org )

In questo caso, quando i cookie vengono bloccati, l'identificatore di sessione non viene inviato e lo script di destinazione genera un errore "sessione non trovata".

(Ho provato a impostare l'identificatore di sessione nel modulo e a caricarlo dalle variabili POST. Ciò avrebbe funzionato , ma per motivi politici non sono riuscito a farlo.)

È possibile rendere più attendibile la pagina all'interno di IFRAME: se la pagina interna invia un'intestazione P3P con una politica sulla privacy accettabile per IE, i cookie saranno accettati .

Come risolverlo

Crea una politica p3p

Un buon punto di partenza è il tutorial W3C . L'ho esaminato, scaricato IBM Privacy Policy Editor e lì ho creato una rappresentazione dell'informativa sulla privacy e le ho dato un nome a cui fare riferimento (eccolo qui policy1).

NOTA : a questo punto, devi effettivamente scoprire se il tuo sito ha una politica sulla privacy e, in caso contrario, crearlo - se raccoglie i dati dell'utente, che tipo di dati, che cosa fa con esso, chi ha accesso ad esso, ecc. Devi trovare queste informazioni e pensarci . Basta schiaffeggiare alcuni tag non lo taglierà. Questo passaggio non può essere eseguito esclusivamente nel software e può essere altamente politico (ad esempio "dovremmo vendere le nostre statistiche sui clic?").

(ad es. "il sito è gestito da ACME Ltd., utilizza identificatori anonimi per sessione per il suo funzionamento, raccoglie i dati degli utenti solo se esplicitamente consentito e solo per i seguenti scopi, i dati vengono archiviati solo per il tempo necessario, solo la nostra azienda ha accesso ad esso, ecc. ecc. ").

(Durante la modifica con questo strumento, è possibile visualizzare errori / omissioni nella politica. Molto utile è anche la scheda "Politica HTML": in fondo, ha una "Valutazione politica" - un rapido controllo se la politica sarà bloccata dalle impostazioni predefinite di IE)

L'Editor esporta in un file .p3p, che è una rappresentazione XML della politica di cui sopra. Inoltre, può esportare una "versione compatta" di questo criterio.

Link alla politica

Quindi http://example.com/w3c/p3p.xmlera necessario un file di riferimento delle politiche ( ) (un indice delle politiche sulla privacy utilizzate dal sito):

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

Gli <INCLUDE>spettacoli tutti gli URI che utilizzeranno questa politica (nel mio caso, l'intero sito). Il file della politica che ho esportato dall'editor è stato caricatohttp://example.com/w3c/example-com.p3p

Invia l'intestazione compatta con le risposte

Ho impostato il server web su example.com per inviare l'intestazione compatta con risposte, in questo modo:

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

policyrefè un URI relativo al file di riferimento della politica (che a sua volta fa riferimento alle politiche sulla privacy), CPè la rappresentazione compatta della politica. Si noti che la combinazione di intestazioni P3P nell'esempio potrebbe non essere applicabile al proprio sito Web specifico; le intestazioni P3P DEVONO rappresentare in modo veritiero la tua politica sulla privacy!

Profitto!

In questa configurazione, Evil Eye non viene visualizzato, i cookie vengono salvati anche nell'IFRAME e l'applicazione funziona.

Modifica: cosa NON fare, a meno che non ti piaccia difendersi da azioni legali

Diverse persone hanno suggerito "basta schiaffeggiare alcuni tag nell'intestazione P3P, finché Evil Eye non si arrende".

I tag non sono solo un mucchio di bit, hanno significati nel mondo reale e il loro uso ti dà responsabilità nel mondo reale !

Ad esempio, fingere di non raccogliere mai i dati degli utenti potrebbe rendere felice il browser, ma se si raccolgono effettivamente i dati degli utenti, il P3P è in conflitto con la realtà. Chiaro e semplice, stai mentendo intenzionalmente ai tuoi utenti e questo potrebbe essere un comportamento criminale in alcuni paesi. Come in "vai in galera, non raccogliere $ 200".

Alcuni esempi ( vedi p3pwriter per l'intero set di tag ):

  • NOI : "Il sito Web non raccoglie dati identificati". (non appena ci sono personalizzazioni, accessi o raccolte di dati (***** Analytics, chiunque?), devi riconoscerlo nel tuo P3P)
  • STP : le informazioni vengono conservate per soddisfare lo scopo dichiarato. Ciò richiede che le informazioni vengano scartate al più presto possibile. I siti DEVONO avere una politica di conservazione che stabilisce un calendario per la distruzione. La politica di conservazione deve essere incluso in o collegati a norme sulla privacy leggibile del sito."(Quindi se inviare STP, ma non hanno un criterio di conservazione, si può commetterebbe frode. Come fresco è che? Niente affatto.)

Non sono un avvocato, ma non sono disposto ad andare in tribunale per vedere se l'intestazione P3P è davvero legalmente vincolante o se puoi promettere qualcosa ai tuoi utenti senza realmente voler onorare le tue promesse.


Ero completo al 95%, ma la mia intestazione diceva solo: P3P: CP = "...." e non includevo il link policyref, che lo faceva funzionare in IE7, ma non IE6 ... ora funziona bene. Grazie!
AndreasKnudsen,

4
Il collegamento all'editor IBM non funziona più. Attraverso The Wayback Machine sono stato in grado di trovare questo link funzionante: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234

34
Alcune notizie su questo argomento: -IBM editor può essere trovato su: softpedia.com/get/Security/Security-Related/… -P3P Gli standard sembrano essere "morti". Grandi aziende come Google e Facebook ora usano intestazioni P3P non valide per aggirare la sicurezza di IE. Vedi questi messaggi: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/… techpolicy.com/…
Davide Icardi,

7
Altre informazioni che possono aiutare qualcuno con un problema simile: dai miei test se i domini si trovano in diverse zone di sicurezza (ad esempio la prima parte è internet e la terza è intranet) non è possibile accettare cookie di terze parti anche se P3P è corretto configurato. Il cookie è sempre bloccato.
Davide Icardi,

1
È importante notare che il termine "terze parti" non è così chiaro come si potrebbe pensare. Se un iframe ha contenuti di terze parti relativi al sito allegato e ha una politica sulla privacy valida e reindirizza a una vista nell'iframe che proviene dal sito principale, quindi a meno che tale vista non abbia una politica sulla privacy valida, IE non lo farà fidati dei suoi biscotti. Anche se quella vista proviene dallo stesso sito di quella contenente l'iframe.
Prezzi

168

Ho trascorso gran parte della mia giornata a esaminare questa cosa P3P e sento il bisogno di condividere ciò che ho scoperto.

Ho notato che il concetto P3P è molto obsoleto e sembra solo essere realmente utilizzato / applicato da Internet Explorer (IE).

La spiegazione più semplice è: IE vuole che tu definisca un'intestazione P3P se stai usando i cookie.

Questa è una buona idea, e per fortuna il più delle volte non fornire questa intestazione non causerà alcun problema (leggi gli avvisi del browser). A meno che il tuo sito Web / applicazione web non sia caricato in un altro sito Web utilizzando un (i) Frame. Questo è dove IE diventa un dolore enorme nel ***. Non ti consentirà di impostare un cookie a meno che non sia impostata l'intestazione P3P.

Sapendo questo volevo trovare una risposta alle seguenti due domande:

  1. Che importa? In altre parole, posso essere citato in giudizio se inserisco la parola "Patata" nell'intestazione?
  2. Cosa fanno le altre aziende?

Le mie scoperte sono:

  1. Non importa a nessuno. Non riesco a trovare un singolo documento che suggerisca che questa tecnologia abbia alcun peso legale. Durante la mia ricerca non ho trovato un solo paese al mondo che ha adottato una legge che ti impedisce di mettere la parola "Patata" nell'intestazione P3P
  2. Sia Google che Facebook inseriscono un collegamento nel campo dell'intestazione P3P facendo riferimento a una pagina che descrive perché non hanno un'intestazione P3P.

Il concetto è nato nel 2002 e mi sorprende che questo concetto obsoleto e giuridicamente non implementato sia ancora imposto agli sviluppatori all'interno di IE. Se questa intestazione non ha ramificazioni legali, questa intestazione deve essere ignorata (o, in alternativa, generare un avviso o una notifica nella console). Non applicato! Ora sono costretto a inserire una riga nel mio codice (e inviare un'intestazione al client) che non fa assolutamente nulla.

In breve - per rendere felice IE - aggiungi la seguente riga al tuo codice PHP (Altre lingue dovrebbero apparire simili)

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

Problema risolto e IE è contento di questa patata.


6
In effetti, il problema è cambiato in modo significativo dal 2008, quando questo è stato pubblicato. Il Web è andato avanti e il consenso su P3P si è basato su "a nessuno importa più". Buono a sapersi cosa fa IE con input non validi in questo caso.
Piskvor lasciò l'edificio

19
Oh amico, questa è una di quelle gemme nascoste di Internet Explorer! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" Internet Explorer è stato programmato da idioti \ ""); Quello funziona per me!
Michiel Cornille,

6
@Mvision Non dare la colpa agli sviluppatori, si tratta piuttosto di un problema relativo agli avvocati e alla direzione? Immagino che la maggior parte degli sviluppatori si sia
resa

5
Per ASP.Net, puoi aggiungerlo alla tua configurazione web: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & quot; Internet Explorer lo richiede per Imposta cookie di terze parti & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner

1
Oh, questo deve essere più alto! Ho impiegato ore a cercare di far funzionare i cookie in un iframe di IE 11. Provare tutti i tipi di combinazioni P3P e ottenere vari risultati a seconda del tipo / scadenza dei cookie. Alla fine inserendo il Potatomio P3P è stato risolto. haha!
dtbaker,

55

Sono stato in grado di far sparire il malocchio semplicemente aggiungendo questa piccola intestazione al sito nell'IFrame (soluzione PHP):

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

Ricorda di premere ctrl + F5 per ricaricare il tuo sito o Explorer potrebbe ancora mostrare il malocchio, nonostante il fatto che funzioni bene. Questo è probabilmente il motivo principale per cui ho avuto così tanti problemi a farlo funzionare.

Nessun file politico era necessario.

Modifica: ho trovato un bel post sul blog che spiega il problema con i cookie in IFrames. Ha anche una soluzione rapida nel codice C #: frame, pagine ASPX e cookie rifiutati


10
IANAL, ma la politica del P3P sembra essere giuridicamente vincolante. Sei consapevole di ciò che prometti agli utenti qui o hai semplicemente mescolato i tag fino alla scomparsa di EvilEye? Penso che la memorizzazione nella cache del browser non costituirà il problema più grande di questi: " NOI : il sito Web non raccoglie dati identificati. STP : le informazioni vengono conservate per soddisfare lo scopo dichiarato. Ciò richiede che le informazioni vengano scartate al più presto possibile. I siti DEVONO avere una politica di conservazione che stabilisce un calendario per la distruzione. La politica di conservazione DEVE essere inclusa o collegata dalla politica sulla privacy leggibile dall'uomo del sito. "
Piskvor lasciò l'edificio il

28
Devo ammettere che non mi interessa davvero cosa significhi, avevo solo bisogno di cose per funzionare in Explorer. I siti sono i nostri siti non pubblici, uno dei quali utilizza un cookie per "ricordare" in quale stile mostrare il sito. Quindi, sì, ho appena mescolato i tag fino a quando il malocchio è scomparso.
Helo,

Ho trovato un bel post sul blog che spiega il problema qui: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo,

6
La crescente irrilevanza di P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Se è così giuridicamente vincolante, ci sarebbe una causa legale ormai dimostrando tale. È visto con così tanta stima che tutti tranne uno dei miei concorrenti si preoccupano addirittura di pubblicarne uno in primo luogo. Devono capire che se i loro clienti non riescono a lasciare l'impostazione IE su Medium, non ne valgono la pena. Le vendite perse su un sito dovrebbero essere piuttosto elevate se i cookie non funzionano, il carrello muore senza di loro.
Fiasco Labs,

3
Questa risposta suggerisce di usare un'intestazione fittizia come CP="This_is_not_a_privacy_policy". Farlo sembra meno giuridicamente vincolante, penso (dal momento che ad esempio NOI e STP e nulla di simile è menzionato), e apparentemente rende IE felice :-)
KajMagnus,

21

Questo è sepolto nei commenti di altre risposte, ma mi è quasi sfuggito, quindi sembra che meriti una sua risposta.

Per rivedere: affinché IE accetti i cookie di terze parti, è necessario pubblicare i file con un'intestazione http denominata p3p nel formato:

CP="my compact p3p policy"

MA, p3p è praticamente morto come standard a questo punto e puoi facilmente far funzionare IE senza investire tempo e risorse legali nella creazione di una vera politica p3p. Questo perché se l'intestazione della politica p3p compatta non è valida, IE la considera effettivamente una buona politica e accetta cookie di terze parti. Quindi puoi usare un'intestazione p3p come questa

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

Puoi facoltativamente includere un link a una pagina che spiega perché non hai una politica p3p, come fanno Google e Facebook (puntano qui: https://support.google.com/accounts/answer/151657 e qui: https : //www.facebook.com/help/327993273962160/ ).

Infine, è importante notare che tutti i file serviti dal sito di terze parti devono avere l'intestazione p3p, non solo quella che imposta il cookie, quindi potresti non essere in grado di farlo solo nel tuo PHP, asp.net, ecc. codice. Probabilmente stai meglio impostando a livello di server web (cioè in IIS o Apache).


20

Ho avuto anche questo problema, ho pensato di pubblicare il codice che ho usato nel mio progetto MVC2. Fai attenzione quando nel ciclo di vita della pagina aggiungi l'intestazione o otterrai una HttpException "Il server non può aggiungere l'intestazione dopo che le intestazioni HTTP sono state inviate ." Ho usato un ActionFilterAttribute personalizzato sul metodo OnActionExecuting (chiamato prima che l'azione venga eseguita).

/// <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);
    }
}

Esempio di utilizzo:

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

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}

14

Questo è un grande argomento sul problema, tuttavia ho scoperto che un dettaglio importante (che era essenziale almeno nel mio caso) che non è stato pubblicato qui o altrove (mi scuso se l'ho perso) era che la linea P3P doveva essere passato nell'intestazione di OGNI file inviato dal server di terze parti, anche i file che non impostano o utilizzano i cookie come file Javascript o immagini. Altrimenti i cookie verranno bloccati. Ne ho altre in un post qui: http://posheika.net/?p=110


5

Chiunque abbia questo problema in node.js.

Quindi aggiungere questo modulo p3p e abilitare questo modulo nel middleware.

npm install p3p

Sto usando express, quindi lo aggiungo in app.js

Per prima cosa richiedi quel modulo in app.js

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

quindi usarlo come middleware

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

Aggiungerà le intestazioni p3p all'oggetto res. Non c'è bisogno di fare altre cose.

Maggiori informazioni su:

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


5

Se qualcuno è alla ricerca della linea Apache; abbiamo usato questo.

Set di intestazioni P3P "CP = \" Grazie IE8 \ ""

Non importava a che cosa impostassimo il valore CP, purché ci sia l'intestazione P3P.


4

Una cosa possibile da fare è aggiungere il dominio ai siti consentiti negli strumenti -> opzioni internet -> privacy -> siti: somedomain.com -> consenti -> OK.


23
Sì, se ti interessa solo che funzioni sul tuo computer. Non è del tutto pratico suggerire questo ad ogni visitatore.
Piskvor lasciò l'edificio il

3

Questo post fornisce alcuni commenti su P3P e una soluzione scorciatoia che riduce i problemi con IE7 e IE8.


1
Per citare l'articolo: "in pratica dice" Non stiamo raccogliendo i tuoi dati personali "" - buona fortuna con quello. Ho visto zero siti che effettivamente soddisfano i token impostati in quella politica (non raccolgono alcun dato , nemmeno dati statistici anonimi - registri di accesso al server, nessuno?). L'altra politica offerta è anche piuttosto difficile da realizzare (hai qualche tipo di analisi web? Bam, hai appena rotto la tua politica P3P). Quindi, l'articolo può essere riassunto come "solo mentire palesemente, a nessuno importa comunque". L'articolo più utile su tutta Internet , anzi.
Piskvor lasciò l'edificio il

Per citare un'altra parte dell'articolo: "Ci sono sorprendentemente poche e buone informazioni gratuite su Internet su P3P, politiche compatte e requisiti di IE7 - e IE7 non fornisce assolutamente utili risultati di debug come il motivo per cui il tuo cookie è stato bloccato." Questo sembra essere completamente vero! Dopo aver trascorso gran parte della mia giornata a cercare di scoprire perché IE7 / 8 si è comportato diversamente rispetto a qualsiasi altro browser, sono stato estremamente felice di trovare questo post. Probabilmente è tempo di rendersi conto che P3P è una specifica morta e che la maggior parte delle persone preferisce semplicemente aggirarla. Questo post è probabilmente il più utile in materia.
Henrik Aasted Sørensen,

"Ci sono sorprendentemente poche informazioni gratuite e buone su Internet", che avrebbe potuto essere vero nel 2007 (quando è stato scritto), ma ora ci sono molte informazioni su Internet, persino strumenti gratuiti che ti aiutano a costruire la politica P3P secondo la tua situazione specifica. Non sto difendendo P3P, ma dire "eh, falla andare, basta che vada via" può avere conseguenze costose (poiché stai facendo affermazioni molto inequivocabili sul tuo sito). Se P3P è in realtà legalmente vincolante non ha ' non sono ancora stato testato (IIRC), ma non vorrei essere sul lato ricevente di quella causa.
Piskvor lasciò l'edificio il

1
@Piskvor: pubblica gli strumenti P3P gratuiti. Tutti quelli a cui provo ad andare sono stati acquistati da link farm e ricerche false. IBM ha estratto il suo strumento gratuito. Il supporto P3P sembra essere la morte dell'erba in una siccità nel 2012.
Fiasco Labs

2
Ho trovato l'editor IBM Alphaworks p3p qui su softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs

3

Una soluzione che non ho visto menzionato qui, è utilizzare l' archiviazione di sessione anziché i cookie. Naturalmente questo potrebbe non soddisfare le esigenze di tutti, ma per alcuni casi è una soluzione semplice.


1
Buon punto. Si noti che al momento della pubblicazione di questa domanda, il supporto per l'archiviazione della sessione era inesistente, soprattutto in IE. Ma i tempi stanno cambiando;)
Piskvor ha lasciato l'edificio il

3

Stavo indagando su questo problema per quanto riguarda il log-off tramite i servizi di controllo degli accessi di Azure e non sono riuscito a connettere testa e croce di nulla.

Quindi, sono incappato in questo post https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

In breve, IE non condivide i cookie tra zone (ad es. Internet vs. siti attendibili).

Quindi, se il tuo target IFrame e la pagina html si trovano in P3P di zone diverse non ti aiuteranno in nulla.


Sono sorpreso che questo sia ancora rilevante nel 2016 :)
Piskvor ha lasciato l'edificio il

1
Lo stato di P3P in IE è documentato qui: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , il futuro sembra brillante :)
Frode Nilsen


2

Ho già implementato una politica P3P completa, ma non volevo passare di nuovo la seccatura per un nuovo progetto a cui stavo lavorando. Ho trovato questo link utile per una semplice soluzione al problema, dovendo solo specificare una politica P3P compatta minima di "CAO PSA OUR":

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

L'articolo cita un link (ora non funzionante) a un articolo di Microsoft KB. La politica ha fatto il trucco per me!


1

È inoltre possibile combinare i file p3p.xml e policy.xml come tali:

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

Ho trovato il modo più semplice per aggiungere un'intestazione è proxy tramite Apache e utilizzare mod_headers, come tale:

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

Quindi eseguiamo il proxy di tutte le richieste tranne quelle su /w3c/p3p.xml sul nostro server delle applicazioni.

Puoi testare tutto con il validatore W3C


Questo invia l'intestazione con 304 richieste? Alcune versioni di IE elimineranno effettivamente i cookie se invii un'intestazione P3P con un 304.
Joshua,

Spiacenti, non lo so poiché non lavoro più su questo codice. Se è un problema puoi probabilmente forzare il codice di stato in Apache a 200.
Kris


1

So che è un po 'tardi per dare il mio contributo su questo argomento, ma ho perso così tante ore che forse questa risposta aiuterà qualcuno.

Stavo cercando di chiamare un cookie di terze parti sul mio sito e ovviamente non funzionava su Internet Explorer 10, anche a un livello di sicurezza basso ... non chiedermi perché. Nell'iframe stavo chiamando a read_cookie.php (echo $ _COOKIE) con ajax.

E non so perché non ero in grado di impostare la politica P3P per risolvere il problema ...

Durante la mia ricerca ho visto qualcosa sul funzionamento del cookie in JSON. Non ci provo nemmeno perché pensavo che se il cookie non passasse attraverso un iframe, non passerebbe più attraverso un array ...

Indovina un po '! Quindi se json_encode il tuo cookie decodifica dopo la tua richiesta Ajax, lo otterrai!

Forse c'è qualcosa che mi è sfuggito e, se l'ho fatto, tutte le mie scuse, ma non ho mai visto qualcosa di così stupido. Blocca i cookie di terze parti per motivi di sicurezza, perché no, ma lascialo passare se codificato? Dov'è la sicurezza ora?

Spero che questo post possa aiutare qualcuno e di nuovo, se ho perso qualcosa e sono stupido, per favore educami!


Interessante ... quindi stai decodificando il cookie in JS?
Piskvor lasciò l'edificio il

No, sto solo scrivendo il cookie in un array JSON con la funzione php json_encode () per poi tornare indietro tramite una chiamata JSON ajax.
pierreaurelemartin,

1

Questo alla fine ha funzionato per me (dopo molta fretta e la generazione di alcune politiche utilizzando il generatore di politiche IBM). Puoi scaricare il generatore di politiche qui: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Non sono più riuscito a scaricare il generatore dal sito Web ufficiale IBM.

Ho creato questi file nella cartella principale della mia app Web

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: basta inviare un'intestazione aggiuntiva:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Contenuto di p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Contenuto del mio file policy.html

<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:info@YOURMAIL.de">
info@YOURMAIL.eu</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. Contenuto di policy.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">info@YOURMAIL.eu</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>

Va alla directory del server della finestra padre o alla directory del server iframe?
JackTheKnife il


0

Per chiunque cerchi di far funzionare la P3P Compact Policy con contenuto statico:

È possibile solo se si è in grado di inviare intestazioni di risposta personalizzate lato server con contenuto statico.

Per una spiegazione più dettagliata vedi la mia risposta qui: imposta il codice P3P in HTML



-1

Una soluzione migliore sarebbe quella di effettuare una chiamata Ajax all'interno dell'iframe alla pagina per ottenere / impostare i cookie ...


1
AJAX non aiuta qui: qualsiasi gestione dei cookie all'interno dell'iframe è meno attendibile ("cookie di terze parti") e in IE deve passare attraverso il filtro Informativa sulla privacy, indipendentemente dal fatto che si stiano impostando cookie con chiamate AJAX, documento Manipolazione .cookie o tramite pagine normali (testato).
Piskvor lasciò l'edificio il

no, se stai effettuando una chiamata Ajax che imposta i cookie con HTTP (all'interno dell'iframe) Ie6 ignora la politica di sicurezza e imposta il cookie. Assicurati che la mia soluzione sia sbagliata prima di effettuare il downgrade.
Luca Matteis,

Vedi newmoon.wz.cz/test/page.php .Puoi impostare i cookie tramite AJAX, ma a) avviare una nuova sessione oppure b) impostare l'ID della sessione da JS - un enorme buco di sicurezza (XSRF). Il mio commento precedente era sbagliato, mi apologize.But, il tuo aspetto soluzione wronger rispetto a prima: fare un buco di sicurezza sembra male a me.
Piskvor lasciò l'edificio l'

(Tutto ciò che "ignora la politica di sicurezza" mi sembra almeno un bug - se c'è una politica, è lì per qualche motivo. Dire "rovinare la politica di sicurezza / preferenze dell'utente, lo sappiamo meglio" è una pericolosa pendenza scivolosa. Inoltre , lasceresti che la funzionalità dipenda da bug noti (ancora) non
risolti

Impostare una nuova sessione? Di cosa stai parlando? La maggior parte dei browser lo supporta, senza roba nell'intestazione p3p, quindi non capisco come farlo attraverso l'Ajax sia diverso ...
Luca Matteis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.