Tengo dos sitios web, digamos que son ejemplo.com
y 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 rellene y lo envíe a 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.asp
como un IFRAME en IE 6 o IE 7, las cookies de example.com no se guardan. En Firefox este problema no aparece.
A modo de prueba, he creado una configuración similar en http://newmoon.wz.cz/test/page.php .
Ejemplo.com" utiliza sesiones basadas en cookies (y no hay nada que pueda hacer al respecto), por lo que sin cookies, "process.asp" no se ejecutará. **¿Cómo puedo forzar a IE a guardar esas cookies?
Resultados del rastreo del tráfico HTTP: en la respuesta GET /someform.asp, hay una cabecera Set-Cookie por sesión válida (por ejemplo, Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
), pero en la petición POST /process.asp, no hay ninguna cabecera Cookie.
Edit3: algunos scripts AJAX+serverside son aparentemente capaces de esquivar el problema, pero eso se parece mucho a un bug, además de que abre todo un nuevo conjunto de agujeros de seguridad. No quiero que mis aplicaciones usen una combinación de bug+agujero de seguridad sólo porque es fácil.
Edición: la política P3P fue la causa raíz, explicación completa más abajo.
policy1
).
NOTA: en este punto, realmente necesitas averiguar si tu sitio tiene una política de privacidad, y si no, crearla - si recoge datos del usuario, qué tipo de datos, qué hace con ellos, quién tiene acceso a ellos, etc. Tienes que encontrar esta información y pensar en ella. **Este paso no puede hacerse sólo con 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, recoge datos de los usuarios sólo si se permite explícitamente y sólo para los siguientes fines, los datos se almacenan sólo el tiempo necesario, sólo nuestra empresa tiene acceso a ellos, etc. etc.").
(Al editar con esta herramienta, es posible ver errores/omisiones en la política. También es muy útil la pestaña "HTML Policy": en la parte inferior, tiene un "Policy Evaluation" - una comprobación rápida de si la política será bloqueada por la configuración por defecto de IE')
El editor exporta a un archivo .p3p, que es una representación XML de la política anterior. También puede exportar una "versión compacta" de esta política.
Enlace a la políticaA continuación, se necesitaba un archivo de referencia de políticas (http://example.com/w3c/p3p.xml
) (un índice de las políticas de privacidad que utiliza el sitio):
<meta>
<POLICY-REFERENCES>
<POLICY-REF about="/w3c/example-com.p3p#policy1">
<INCLUDE>/</INCLUDE>
<COOKIE-INCLUDE/>
</POLICY-REF>
</POLICY-REFERENCES>
</meta>
<INCLUDE>
muestra todos los URIs que utilizarán esta política (en mi caso, todo el sitio). El archivo de política que he exportado desde el editor se ha cargado en http://example.com/w3c/example-com.p3p
.
Envía la cabecera compacta con las respuestasHe configurado el servidor web de example.com para que envíe la cabecera compacta con las respuestas, de la siguiente manera:
HTTP/1.1 200 OK
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content
policyref
es un URI relativo al archivo Policy Reference (que a su vez hace referencia a las políticas de privacidad), CP
es la representación compacta de la política. **Tenga en cuenta que la combinación de cabeceras P3P del ejemplo puede no ser aplicable a su sitio web concreto; sus cabeceras P3P DEBEN representar fielmente su propia política de privacidad.
BeneficiosVarias personas han sugerido "sólo pegar algunas etiquetas en su encabezado P3P, hasta que el Evil Eye se da por vencido". Las etiquetas no son sólo un montón de bits, tienen significados del mundo real, y su uso te da responsabilidades del mundo real. Por ejemplo, pretender que nunca recoges datos del usuario puede hacer feliz al navegador, pero si realmente recoges datos del usuario, el P3P está en conflicto con la realidad. Simple y llanamente, 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 recoger $ 200". Algunos ejemplos (ver p3pwriter para el conjunto completo de etiquetas):