Cookie bloqueada / no guardada en IFRAME en Internet Explorer

392

Tengo dos sitios web, digamos que son example.comy anotherexample.net. En anotherexample.net/page.html, tengo un IFRAME SRC="http://example.com/someform.asp". Ese IFRAME muestra un formulario para que el usuario lo complete y lo envíe http://example.com/process.asp. Cuando abro el formulario (" someform.asp") en su propia ventana del navegador, todo funciona bien. Sin embargo, cuando cargo someform.aspcomo IFRAME en IE 6 o IE 7, las cookies de example.com no se guardan. En Firefox este problema no aparece.

Para fines de prueba, he creado una configuración similar en http://newmoon.wz.cz/test/page.php .

example.comutiliza sesiones basadas en cookies (y no hay nada que pueda hacer al respecto), por lo que sin cookies process.aspno se ejecutará. ¿Cómo fuerzo a IE a guardar esas cookies?

Resultados de detectar el tráfico HTTP: en la respuesta GET /someform.asp, hay un encabezado Set-Cookie válido por sesión (por ejemplo Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), pero en la solicitud POST /process.asp, no hay ningún encabezado Cookie.

Edit3: algunas secuencias de comandos del servidor AJAX + aparentemente son capaces de eludir el problema, pero eso se parece mucho a un error, además de que abre un nuevo conjunto de agujeros de seguridad . No quiero que mis aplicaciones usen una combinación de error + agujero de seguridad solo porque es fácil.

Editar: la política P3P fue la causa raíz , la explicación completa a continuación.

Piskvor
fuente
una buena solución de hecho ... intenté crear la política de privacidad ... agregué a mi raíz de contexto ... y en mi página jsp estoy configurando el encabezado ... todavía no puedo deshacerme de ese ojo rojo ... puedo ayudar resolviendo el problema ..
user902490
Gracias por el sitio de demostración @Piskvor, lo mencioné aquí en esta publicación de Security.SE que enumera sitios web con pruebas de navegador interactivas
goodguys_activate el
@ makerofthings7: YW. Lo migraré a un sitio no temporal (sic!) Y sugeriré una edición en Security.se, esa página fue una prueba de concepto un tanto extravagante.
Piskvor salió del edificio el
2
No se moleste en intentar hacer que P3P se ejecute en Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P no funciona en absoluto, así que no importa lo que haga, las cookies no se almacenarán. Prueba aquí también enhaie.com/test/cookie
puco

Respuestas:

429

Lo puse a trabajar, pero la solución es un poco compleja, así que tengan paciencia conmigo.

Qué esta pasando

Tal como están las cosas, Internet Explorer otorga un nivel de confianza más bajo a las páginas IFRAME (IE llama a este contenido "de terceros"). Si la página dentro del IFRAME no tiene una Política de privacidad, sus cookies están bloqueadas (lo cual se indica mediante el icono del ojo en la barra de estado, cuando hace clic en él, le muestra una lista de URL bloqueadas).

El ojo maligno
(fuente: piskvor.org )

En este caso, cuando se bloquean las cookies, el identificador de sesión no se envía y el script de destino arroja un error 'sesión no encontrada'.

(Intenté configurar el identificador de sesión en el formulario y cargarlo desde las variables POST. Esto hubiera funcionado , pero por razones políticas no pude hacerlo).

Es posible hacer que la página dentro del IFRAME sea más confiable: si la página interna envía un encabezado P3P con una política de privacidad que sea aceptable para IE, se aceptarán las cookies .

Cómo resolverlo

Crear una política p3p

Un buen punto de partida es el tutorial del W3C . Lo revisé, descargué el Editor de políticas de privacidad de IBM y allí creé una representación de la política de privacidad y le di un nombre para hacer referencia a ella (aquí estaba policy1).

NOTA : en este punto, en realidad necesita saber si su sitio tiene una política de privacidad y, de no ser así, crearla: si recopila datos del usuario, qué tipo de datos, qué hace con ellos, quién tiene acceso a ellos, etc. Necesita encontrar esta información y pensar en ello. Simplemente golpeando unas pocas etiquetas no será suficiente. Este paso no se puede realizar únicamente en software y puede ser muy político (por ejemplo, "¿deberíamos vender nuestras estadísticas de clics?").

(por ejemplo, "el sitio es operado por ACME Ltd., utiliza identificadores anónimos por sesión para su funcionamiento, recopila datos de usuario solo si está explícitamente permitido y solo para los siguientes propósitos, los datos se almacenan solo el tiempo que sea necesario, solo nuestra empresa tiene acceso a él, etc. etc. ").

(Al editar con esta herramienta, es posible ver errores / omisiones en la política. También es muy útil la pestaña "Política HTML": en la parte inferior, tiene una "Evaluación de política" - una verificación rápida si la política será bloqueada por la configuración predeterminada de IE)

El Editor exporta a un archivo .p3p, que es una representación XML de la política anterior. Además, puede exportar una "versión compacta" de esta política.

Enlace a la política

Luego http://example.com/w3c/p3p.xmlse necesitaba un archivo de referencia de política ( ) (un índice de políticas de privacidad que usa el sitio):

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

Los <INCLUDE>espectáculos de todos los URI que utilizarán esta política (en mi caso, todo el sitio). El archivo de política que exporté del Editor se cargó enhttp://example.com/w3c/example-com.p3p

Enviar el encabezado compacto con respuestas

He configurado el servidor web en example.com para enviar el encabezado compacto con respuestas, como esta:

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

policyrefes un URI relativo al archivo de referencia de políticas (que a su vez hace referencia a las políticas de privacidad), CPes la representación compacta de políticas. Tenga en cuenta que la combinación de encabezados P3P en el ejemplo puede no ser aplicable en su sitio web específico; ¡Sus encabezados P3P DEBEN representar sinceramente su propia política de privacidad!

¡Lucro!

En esta configuración, Evil Eye no aparece, las cookies se guardan incluso en el IFRAME y la aplicación funciona.

Editar: Qué NO hacer, a menos que te guste defenderte de los juicios

Varias personas han sugerido "simplemente colocar algunas etiquetas en su encabezado P3P, hasta que Evil Eye se rinda".

¡Las etiquetas no son solo un montón de bits, tienen significados del mundo real y su uso le otorga responsabilidades en el mundo real !

Por ejemplo, fingir que nunca recopila datos de usuario puede hacer feliz al navegador, pero si realmente recopila datos de usuario, el P3P está en conflicto con la realidad. Claro y simple, estás mintiendo a propósito a tus usuarios , y eso podría ser un comportamiento criminal en algunos países. Como en "ir a la cárcel, no cobrar $ 200".

Algunos ejemplos ( ver p3pwriter para el conjunto completo de etiquetas ):

  • NOI : "El sitio web no recopila datos identificados". (en cuanto haya personalización, inicio de sesión o recopilación de datos (***** Analytics, ¿alguien?), debe reconocerlo en su P3P)
  • STP : la información se retiene para cumplir con el propósito establecido. Esto requiere que la información se descarte lo antes posible. Los sitios DEBEN tener una política de retención que establezca un calendario de destrucción. La política de retención DEBE incluirse o vincularse desde la política de privacidad legible por humanos del sitio "(así que si envía STPpero no tiene una política de retención, puede estar cometiendo fraude. ¿Qué tan genial es eso?

No soy abogado, pero no estoy dispuesto a ir a la corte para ver si el encabezado P3P es realmente legalmente vinculante o si puede prometerle algo a sus usuarios sin estar realmente dispuesto a cumplir sus promesas.

Piskvor
fuente
Estaba 95% completo, pero mi encabezado solo decía: P3P: CP = "...." y no incluía el enlace policyref, que lo hacía funcionar en IE7, pero no IE6 ... funciona bien ahora. ¡Gracias!
AndreasKnudsen
44
El enlace al editor de IBM ya no funciona. A través de The Wayback Machine pude encontrar este enlace de trabajo: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234
34
Algunas noticias sobre estos temas: -El editor de IBM se puede encontrar en: softpedia.com/get/Security/Security-Related/… -Los estándares P3P parecen estar "muertos". Las grandes compañías como Google y Facebook ahora usan encabezados P3P no válidos para eludir la seguridad de IE. Vea estas publicaciones: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/… techpolicy.com/…
Davide Icardi
77
Otra información que puede ayudar a alguien con un problema similar: según mis pruebas, si los dominios están en diferentes zonas de seguridad (por ejemplo, el primero es internet y el tercero es intranet) no es posible aceptar cookies de terceros también si P3P está correctamente configurado La cookie siempre está bloqueada.
Davide Icardi
1
Es importante tener en cuenta que el término "tercero" no es tan claro como se podría pensar. Si un iframe tiene contenido de terceros en relación con el sitio adjunto y tiene una política de privacidad válida, y redirige a una vista en el iframe que proviene del sitio principal, a menos que esa vista tenga una política de privacidad válida, IE no lo hará Confíe en sus cookies. Incluso si esa vista proviene del mismo sitio que la que contiene el iframe.
Tarifas
168

He pasado gran parte de mi día investigando esta cuestión de P3P y siento la necesidad de compartir lo que he descubierto.

Me he dado cuenta de que el concepto P3P está muy desactualizado y parece que Internet Explorer (IE) solo lo utiliza realmente.

La explicación más simple es: IE quiere que defina un encabezado P3P si está utilizando cookies.

Esta es una buena idea, y afortunadamente la mayoría de las veces no proporcionar este encabezado no causará ningún problema (lea las advertencias del navegador). A menos que su sitio web / aplicación web se cargue en otro sitio web utilizando un (i) Frame. Aquí es donde IE se convierte en un dolor masivo en el ***. No le permitirá configurar una cookie a menos que el encabezado P3P esté configurado.

Sabiendo esto, quería encontrar una respuesta a las siguientes dos preguntas:

  1. ¿A quien le importa? En otras palabras, ¿puedo ser demandado si pongo la palabra "Papa" en el encabezado?
  2. ¿Qué hacen otras compañías?

Mis hallazgos son:

  1. A nadie le importa. No puedo encontrar un solo documento que sugiera que esta tecnología tenga algún peso legal. Durante mi investigación no encontré un solo país en todo el mundo que haya adoptado una ley que le impida poner la palabra "Papa" en el encabezado P3P
  2. Tanto Google como Facebook ponen un enlace en su campo de encabezado P3P que hace referencia a una página que describe por qué no tienen un encabezado P3P.

El concepto nació en 2002 y me desconcierta que este concepto desactualizado y legalmente no implementado todavía se aplique a los desarrolladores dentro de IE. Si este encabezado no tiene ramificaciones legales, este encabezado debe ignorarse (o alternativamente, generar una advertencia o notificación en la consola). No se aplica! Ahora me veo obligado a poner una línea en mi código (y enviar un encabezado al cliente) que no hace absolutamente nada.

En resumen, para mantener contento a IE, agregue la siguiente línea a su código PHP (otros idiomas deberían ser similares)

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

Problema resuelto, y IE está contento con esta papa.

Ruben
fuente
66
De hecho, el problema ha cambiado significativamente desde 2008, cuando esto se publicó. La Web ha avanzado y el consenso sobre P3P se ha asentado en "a nadie le importa más". Es bueno saber qué hace IE con una entrada no válida en este caso.
Piskvor dejó el edificio
19
¡Oh hombre, esta es una de esas gemas ocultas de Internet Explorer! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" Internet Explorer fue programado por idiotas \ ""); ¡Ese me funciona!
Michiel Cornille
66
@Mvision No culpes a los desarrolladores, este es más bien un problema relacionado con los abogados y la administración. Supongo que la mayoría de los desarrolladores se dieron cuenta de que la característica daría como resultado soluciones similares a la papa :-)
KajMagnus
55
Para ASP.Net, puede agregar esto a su configuración web: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & quot; Internet Explorer requiere esto para Establecer cookies de terceros & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner
1
¡Oh, esto necesita ser más alto! Pasé horas intentando que las cookies funcionen en un iframe de IE 11. Probar todo tipo de combinaciones P3P y obtener diversos resultados según el tipo de cookie / caducidad. Finalmente poner Potatoen mi P3P lo resolvió. ¡jaja!
dtbaker
55

Pude hacer desaparecer el mal de ojo simplemente agregando este pequeño encabezado al sitio en el IFrame (solución PHP):

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

Recuerde presionar ctrl + F5 para volver a cargar su sitio o Explorer puede mostrar el mal de ojo, a pesar de que funciona bien. Esta es probablemente la razón principal por la que tuve tantos problemas para que funcione.

Ningún archivo de política era necesario en absoluto.

Editar: Encontré una buena entrada de blog que explica el problema con las cookies en IFrames. También tiene una solución rápida en el código C #: marcos, páginas ASPX y cookies rechazadas

Helo
fuente
10
IANAL, pero la política P3P parece ser legalmente vinculante. ¿ Sabe lo que promete a los usuarios aquí, o simplemente mezcló las etiquetas hasta que EvilEye desapareció? Creo que el almacenamiento en caché del navegador no será su mayor problema con estos: " NOI : el sitio web no recopila datos identificados. STP : la información se retiene para cumplir con el propósito establecido. Esto requiere que la información se descarte lo antes posible. Los sitios DEBEN tener una política de retención que establezca un calendario de destrucción. La política de retención DEBE incluirse o vincularse desde la política de privacidad legible por humanos del sitio ".
Piskvor salió del edificio
28
Debo admitir que realmente no me importa lo que significa, solo necesitaba cosas para trabajar en Explorer. Los sitios son nuestros propios sitios no públicos, uno de los cuales usa una cookie para "recordar" en qué estilo mostrar el sitio. Entonces, sí, simplemente mezclé etiquetas hasta que desapareció el mal de ojo.
Helo
Encontré una buena entrada de blog que explica el problema aquí: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo
66
La creciente irrelevancia de P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Si es tan legalmente vinculante, habría una demanda legal al probarlo ahora. Se ve con tanta estima que todos menos uno de mis competidores incluso se molestan en publicar uno en primer lugar. Deben darse cuenta de que si sus clientes no pueden dejar la configuración de IE en Medio, no valen la pena el esfuerzo. Las ventas perdidas en un sitio tendrían que ser bastante altas si las cookies no funcionan, el carrito muere sin ellas.
Fiasco Labs
3
Esta respuesta sugiere usar un encabezado ficticio como CP="This_is_not_a_privacy_policy". Hacer eso parece menos legalmente vinculante, creo (ya que, por ejemplo, se menciona NOI y STP y nada de eso), y aparentemente hace feliz a IE :-)
KajMagnus
21

Esto está oculto en los comentarios de otras respuestas, pero casi me lo pierdo, por lo que parece que merece su propia respuesta.

Para revisar: para que IE acepte cookies de terceros, debe servir sus archivos con un encabezado http llamado p3p en el formato:

CP="my compact p3p policy"

PERO, p3p está prácticamente muerto como estándar en este punto y puede hacer que IE funcione fácilmente sin invertir el tiempo y los recursos legales en la creación de una política real de p3p. Esto se debe a que si el encabezado de su política compacta p3p no es válido, IE en realidad lo trata como una buena política y acepta cookies de terceros. Entonces puede usar un encabezado p3p como este

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

Opcionalmente, puede incluir un enlace a una página que explique por qué no tiene una política p3p, como lo hacen Google y Facebook (señalan aquí: https://support.google.com/accounts/answer/151657 y aquí: https : //www.facebook.com/help/327993273962160/ ).

Finalmente, es importante tener en cuenta que todos los archivos servidos desde el sitio de terceros deben tener el encabezado p3p, no solo el que configura la cookie, por lo que es posible que no pueda hacer esto en su PHP, asp.net, etc. código. Probablemente sea mejor configurarlo en el nivel del servidor web (es decir, en IIS o Apache).

David Hammond
fuente
20

También tuve este problema, pensé en publicar el código que usé en mi proyecto MVC2. Tenga cuidado cuando en el ciclo de vida de la página agregue el encabezado o obtendrá una HttpException "El servidor no puede agregar el encabezado después de que se hayan enviado los encabezados HTTP ". Usé un ActionFilterAttribute personalizado en el método OnActionExecuting (llamado antes de que se ejecute la acción).

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

Ejemplo de uso:

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

        return View();
    }

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

Este es un gran tema sobre el tema, sin embargo, encontré que un detalle importante (que era esencial al menos en mi caso) que no se publicó aquí ni en ningún otro lugar (me disculpo si me lo perdí) fue que la línea P3P debe ser pasó en el encabezado de CADA archivo enviado desde el servidor de terceros, incluso los archivos que no configuran o usan cookies como archivos o imágenes Javascript. De lo contrario, las cookies serán bloqueadas. Tengo más información sobre esto en una publicación aquí: http://posheika.net/?p=110

Juris
fuente
5

Cualquiera que tenga este problema en node.js.

Luego agregue este módulo p3p y habilite este módulo en el middleware.

npm install p3p

Estoy usando express, así que lo agrego en app.js

Primero requiere ese módulo en app.js

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

luego úsalo como middleware

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

Agregará encabezados p3p en el objeto res. No es necesario hacer nada extra.

Obtendrá más información en:

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

Harshal_m_joshi
fuente
5

Si alguien está buscando la línea Apache; Usamos este.

Conjunto de encabezado P3P "CP = \" Gracias IE8 \ ""

Realmente no importó el valor de CP establecido, siempre y cuando exista el encabezado P3P.

so_mv
fuente
4

Una cosa posible es agregar el dominio a los sitios permitidos en herramientas -> opciones de internet -> privacidad -> sitios: somedomain.com -> permitir -> Aceptar.

heikkim
fuente
23
Sí, si solo te importa que funcione en tu computadora. No es del todo práctico sugerir esto a cada visitante.
Piskvor salió del edificio el
3

Esta publicación ofrece algunos comentarios sobre P3P y una solución abreviada que reduce los problemas con IE7 e IE8.

Henrik Aasted Sørensen
fuente
1
Para citar el artículo: "básicamente dice" No estamos recopilando ninguno de sus datos personales "", buena suerte con eso. He visto cero sitios que realmente cumplen con los tokens establecidos en esa política (sin recopilar ningún dato , ni siquiera datos estadísticos anónimos: ¿registros de acceso al servidor, alguien?). La otra política ofrecida también es bastante difícil de lograr (¿tiene algún tipo de análisis web? Bam, acaba de romper su política P3P). Entonces, el artículo puede resumirse como "solo miente descaradamente, a nadie le importa de todos modos". Artículo más útil en toda Internet , de hecho.
Piskvor salió del edificio el
Para citar otra parte del artículo: "Sorprendentemente, hay poca información buena y gratuita en Internet sobre P3P, políticas compactas y los requisitos de IE7, y IE7 no ofrece absolutamente ninguna salida de depuración útil, como por qué se bloqueó su cookie". ¡Esto parece ser completamente cierto! Después de pasar la mayor parte del día tratando de descubrir por qué IE7 / 8 se comportó de manera diferente a cualquier otro navegador, me alegró mucho encontrar esta publicación. Probablemente sea hora de darse cuenta de que P3P es una especificación muerta, y que la mayoría de las personas preferiría evitarlo. Esta publicación es probablemente la más útil sobre el tema.
Henrik Aasted Sørensen
"Sorprendentemente hay poca información buena y gratuita en Internet", eso podría haber sido cierto en 2007 (cuando se escribió), pero ahora hay mucha información en Internet, incluso herramientas gratuitas que lo ayudan a construir la política P3P de acuerdo con su situación específica. No estoy defendiendo P3P, pero decir "eh atorníllelo, solo hágalo desaparecer" puede tener consecuencias costosas (ya que está haciendo afirmaciones muy inequívocas sobre su sitio). Si P3P es realmente vinculante legalmente No se ha probado todavía (IIRC), pero no me gustaría estar en el lado receptor de esa demanda.
Piskvor salió del edificio el
1
@Piskvor: publique las herramientas P3P gratuitas. Todos los que intento visitar han sido comprados por granjas de enlaces y búsqueda falsa. IBM sacó su herramienta gratuita. El soporte P3P parece ser como la hierba que muere en una sequía en 2012.
Fiasco Labs
2
Encontré el editor p3p de IBM Alphaworks aquí en softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs
3

Una solución que no he visto aquí, es usar el almacenamiento de sesión en lugar de cookies. Por supuesto, esto podría no satisfacer los requisitos de todos, pero en algunos casos es una solución fácil.

ripper234
fuente
1
Buen punto. Tenga en cuenta que en el momento en que se publicó esta pregunta, el soporte para el almacenamiento de la sesión era inexistente, especialmente en IE. Pero los tiempos están cambiando;)
Piskvor dejó el edificio
3

Estaba investigando este problema con respecto al inicio de sesión a través de los Servicios de control de acceso de Azure, y no pude conectar cabeza y cruz de nada.

Luego, tropecé con esta publicación https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

En resumen, IE no comparte cookies entre zonas (por ejemplo, Internet vs. sitios de confianza).

Por lo tanto, si su objetivo IFrame y la página html están en diferentes zonas, el P3P no ayudará con nada.

Frode Nilsen
fuente
Me sorprende que esto siga siendo relevante en 2016 :)
Piskvor dejó el edificio el
1
El estado de P3P en IE se documenta aquí: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , el futuro se ve brillante :)
Frode Nilsen
2

He implementado una política P3P completa antes, pero no quería volver a la molestia para un nuevo proyecto en el que estaba trabajando. Encontré este enlace útil para una solución simple al problema, solo teniendo que especificar una política P3P compacta mínima de "CAO PSA NUESTRO":

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

El artículo cita un enlace (ahora roto) a un artículo de Microsoft kb. ¡La política me sirvió!

Joel Mitchell
fuente
1

También puede combinar los archivos p3p.xml y policy.xml como tales:

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

Encontré que la forma más fácil de agregar un encabezado es proxy a través de Apache y usar mod_headers, como tal:

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

Por lo tanto, enviamos todas las solicitudes a /w3c/p3p.xml a nuestro servidor de aplicaciones.

Puedes probarlo todo con el validador W3C

Kris
fuente
¿Esto envía el encabezado con 304 solicitudes? Algunas versiones de IE en realidad eliminarán las cookies si envía un encabezado P3P con un 304.
Joshua
Lo siento, no lo sé porque ya no trabajo en este código. Si es un problema, probablemente pueda forzar el código de estado en Apache a 200.
Kris
1

Sé que es un poco tarde para poner mi contribución en este tema, pero perdí tantas horas que tal vez esta respuesta ayude a alguien.

Intenté llamar a una cookie de terceros en mi sitio y, por supuesto, no funcionaba en Internet Explorer 10, incluso con un nivel de seguridad bajo ... no me pregunten por qué. En el iframe, estaba llamando a read_cookie.php (echo $ _COOKIE) con ajax.

Y no sé por qué no pude establecer la política P3P para resolver el problema ...

Durante mi búsqueda, vi algo acerca de cómo funciona la cookie en JSON. Ni siquiera lo intento porque pensé que si la cookie no pasaría por un iframe, ya no pasaría por una matriz ...

¡Adivina qué, lo hace! Entonces, si codifica su cookie json_ luego decodifica después de su solicitud ajax, ¡la obtendrá!

Tal vez hay algo que me perdí y si lo hice, todas mis disculpas, pero nunca vi algo tan estúpido. Bloquee las cookies de terceros por seguridad, ¿por qué no, pero déjelo pasar si está codificado? ¿Dónde está la seguridad ahora?

Espero que esta publicación ayude a alguien y nuevamente, si me perdí algo y soy tonto, ¡por favor, infórmeme!

pierreaurelemartin
fuente
Interesante ... ¿entonces estás decodificando la cookie en JS?
Piskvor salió del edificio el
No, solo estoy escribiendo la cookie en una matriz JSON con la función php json_encode () y luego volviendo a través de la llamada ajax JSON.
pierreaurelemartin
1

Esto finalmente funcionó para mí (después de mucho apuro y generar algunas políticas utilizando el generador de políticas de IBM). Puede descargar el generador de políticas aquí: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Ya no pude descargar el generador del sitio web oficial de IBM.

Creé estos archivos en la carpeta raíz de mi aplicación web

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: solo envíe un encabezado adicional:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Contenido de p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Contenido de mi archivo 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:[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. Contenido de la política.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
fuente
¿Va al directorio del servidor de la ventana principal o al directorio del servidor de iframe?
JackTheKnife
0

Para cualquiera que intente que la Política compacta P3P funcione con contenido estático:

Es solamente posible si usted es capaz de enviar las cabeceras de respuesta del servidor a medida con el contenido estático.

Para obtener una explicación más detallada, vea mi respuesta aquí: establezca el código P3P en HTML

revs Sly_cardinal
fuente
-1

Una mejor solución sería hacer una llamada Ajax dentro del iframe a la página que recibiría / establecería cookies ...

Luca Matteis
fuente
1
AJAX no ayudará aquí: cualquier manejo de cookies dentro del iframe es menos confiable ("cookies de terceros"), y en IE debe pasar por el filtro de Política de Privacidad, no importa si está configurando cookies con llamadas AJAX, documente . manipulación de cookies o a través de páginas normales (probado).
Piskvor salió del edificio el
no, si realiza una llamada ajax que establece las cookies con HTTP (dentro del iframe), Ie6 omite la política de seguridad y establece la cookie. Asegúrese de que mi solución sea incorrecta antes de votar en contra
Luca Matteis
Vea newmoon.wz.cz/test/page.php . Puede configurar cookies a través de AJAX, pero a) inicia una nueva sesión, o b) establece la identificación de la sesión desde JS - un gran agujero de seguridad (XSRF). Mi comentario anterior fue mal, pido disculpas, pero su solución parece peor que antes: hacer un agujero de seguridad me parece malo.
Piskvor salió del edificio el
(Cualquier cosa que "pase por alto la política de seguridad" me parece al menos un error, si hay una política, está ahí por alguna razón. Decir "joder la política de seguridad / preferencias del usuario, lo sabemos mejor" es una pendiente resbaladiza peligrosa. También , ¿dejaría que la funcionalidad dependiera (aún) de errores conocidos no
corregidos
Establecer una nueva sesión? ¿De qué estás hablando? La mayoría de los navegadores admiten esto, sin el encabezado de p3p, por lo que no entiendo cómo hacerlo a través de Ajax es diferente ...
Luca Matteis