Cookie bloqué/non enregistré dans un IFRAME dans Internet Explorer
J'ai deux sites, disons qu'ils sont example.com
et anotherexample.net
.
Sur anotherexample.net/page.html
, j'ai un IFRAME SRC="http://example.com/someform.asp"
. Que l'IFRAME s'affiche un formulaire permettant à l'utilisateur de remplir et de soumettre à http://example.com/process.asp
. Quand j'ouvre le formulaire ("someform.asp
") dans sa propre fenêtre du navigateur, tout fonctionne bien.
Cependant, lorsque je charge someform.asp
comme un IFRAME dans IE 6 ou IE 7, la des cookies pour example.com ne sont pas enregistrées. Dans Firefox, ce problème n'apparaît pas.
Des fins de test, j'ai créé une semblable installation sur http://newmoon.wz.cz/test/page.php .
example.com
utilise des cookies de sessions (et il n'y a rien que je puisse faire à ce sujet), donc sans les cookies, process.asp
ne sera pas exécuté. Comment puis-je la force, c'est à dire enregistrer ces cookies?
Résultats de renifler le trafic HTTP: sur GET /someform.réponse asp, il y a un valide par session-tête Set-Cookie (par exemple Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
), mais sur le POST /processus.demande d'asp, il n'y a pas d'en-tête de Cookie à tous.
Edit3: AJAX+server-side scripting est apparemment capable de contourner le problème, mais qui ressemble fort à un bug, plus il s'ouvre, une nouvelle série de des trous de sécurité. Je ne veux pas que mes applications à utiliser une combinaison de bug+trou de sécurité tout simplement parce que c'est facile.
Edit: le politique P3P a été la cause de racine, explication complète ci-dessous.
- une bonne solution en effet.. j'ai essayé de créer de la politique de confidentialité.. ajouté à ma racine de contexte... et dans ma page jsp je suis en train de l'en-tête.. encore ne suis pas en mesure de se débarrasser de ce que les yeux rouges.. u peut m'aider à résoudre le problème..
- Merci pour le site de démo @Piskvor, j'ai référencé, il ici sur cette Sécurité.SE post qui répertorie les sites web interactifs navigateur tests
- YW. Je vais migrer vers un non-temporaire (sic!) site et de proposer une modification sur la Sécurité.se, que la page était un peu hacky la preuve-de-concept.
- Ne vous embêtez pas à essayer de faire de P3P exécuter dans Windows 10 / Internet Explorer 11 (msdn.microsoft.com/en-us/library/...). P3P ne fonctionne pas du tout, donc, peu importe ce que vous faites, les cookies ne seront pas enregistrées. La preuve ici enhanceie.com/test/cookie
Vous devez vous connecter pour publier un commentaire.
Je l'ai eu à travailler, mais la solution est un peu complexe, si patient avec moi.
Ce qui se passe
Comme il est, Internet Explorer donne plus faible niveau de confiance pour les pages IFRAME (IE appelle cela un "tiers", contenu). Si la page à l'intérieur de l'IFRAME ne pas avoir une Politique de Confidentialité, les cookies sont bloqués (ce qui est indiqué par l'icône dans la barre d'état, lorsque vous cliquez dessus, il vous montre une liste des Url bloquées).
(source: piskvor.org)
Dans ce cas, lorsque les cookies sont bloqués, identifiant de session n'est pas envoyé, et la cible script lance une session pas trouvé d'erreur".
(J'ai essayé le réglage de l'identifiant de session dans le formulaire et de le charger à partir de variables POST. Cela aurait travaillé, mais pour des raisons politiques, je ne pouvais pas le faire.)
Il est possible de faire de la page à l'intérieur de l'IFRAME plus de confiance: si l'intérieur de la page envoie un en-tête P3P avec une politique de confidentialité qui est acceptable pour internet explorer, les cookies seront acceptés.
Comment le résoudre
Créer une politique p3p
Un bon point de départ est la W3C tutoriel. Je suis allé à travers elle, téléchargé le IBM Politique de Confidentialité de l'Éditeur et là, j'ai créé une représentation de la politique de confidentialité et lui a donné un nom à référencer (ici, il a été
policy1
).NOTE: à ce stade, vous avez réellement besoin de savoir si votre site a une politique de confidentialité, et si pas, la créer si elle recueille les données de l'utilisateur, ce type de données, ce qu'il fait avec elle, qui y a accès, etc. Vous avez besoin de trouver cette information et pense à ce sujet. Juste gifler quelques balises ne sera pas coupé. Cette étape ne peut pas être fait purement logiciel, et peut être hautement politique (par exemple, "devrions-nous vendre notre cliquez sur les statistiques?").
(par exemple, "le site est exploité par ACME Ltd., il utilise anonyme par des identifiants de session pour son fonctionnement, recueille les données de l'utilisateur seulement si explicitement autorisé et uniquement pour les fins suivantes, les données sont conservées qu'aussi longtemps que nécessaire, que notre société a accès, etc. etc.").
(Lors de l'édition avec cet outil, il est possible de voir les erreurs ou omissions dans la politique. Également très utile est l'onglet "HTML" Politique: au fond, il a une "Évaluation de la Politique" - un moyen rapide de vérifier si la politique sera bloqué par IE paramètres par défaut)
L'Éditeur exportations .p3p fichier, qui est une représentation XML de la politique ci-dessus. Aussi, il est possible d'exporter un "compact" de la présente politique.
Lien vers la politique de
Alors une Politique de fichier de Référence (
http://example.com/w3c/p3p.xml
) était nécessaire (un index des politiques de confidentialité, le site utilise):La
<INCLUDE>
montre tous les Uri qui fera usage de la présente politique (dans mon cas, l'ensemble du site). Le fichier de stratégie, j'ai exporté à partir de l'Éditeur a été transféré à l'http://example.com/w3c/example-com.p3p
Envoyer l'en-tête compact avec des réponses
J'ai mis le serveur web à example.com pour envoyer le compact-tête avec les réponses, comme ceci:
policyref
est un URI relatif à la Politique dans le fichier de Référence (qui à son tour les références à la politique de confidentialité),CP
est la compacte de la politique de la représentation. Noter que la combinaison de P3P les en-têtes dans l'exemple peuvent ne pas être applicables à votre site web, votre P3P les en-têtes DOIVENT représenter avec vérité de votre propre politique de confidentialité!Profit!
Dans cette configuration, le Mauvais Œil n'apparaît pas, les cookies sont enregistrés, même dans l'IFRAME, et que l'application fonctionne.
Edit: Quoi ne PAS faire, sauf si vous aimez les défendre contre les poursuites judiciaires
Plusieurs personnes ont suggéré "juste mettre quelques balises dans votre en-tête P3P, jusqu'à ce que le Mauvais Œil donne".
Les balises ne sont pas seulement un tas de bits, ils ont monde réel sens, et leur utilisation vous donne monde réel responsabilités!
Par exemple, faire semblant que vous ne recueillons les données de l'utilisateur peut demander au navigateur de plaisir, mais si vous avez réellement recueillons les données de l'utilisateur, le P3P est en conflit avec la réalité. Clair et simple, vous sont délibérément mentir à vos utilisateurs, et qui pourrait être un comportement criminel dans certains pays. Comme dans, "allez en prison, ne recueillent pas 200 dollars".
Quelques exemples (voir p3pwriter pour l'ensemble des balises):
STP
, mais n'ont pas une stratégie de rétention, vous peut commet une fraude. C'est pas cool ça? Pas du tout.)Je ne suis pas un avocat, mais je ne suis pas prêt à aller en cour pour voir si l'en-tête P3P est vraiment juridiquement contraignant ou si vous pouvez promesse vos utilisateurs quelque chose sans réellement prêts à honorer vos promesses.
J'ai passé une grande partie de ma journée à la recherche dans ce P3P chose et je ressens le besoin de partager ce que j'ai découvert.
J'ai remarqué que le P3P concept est très désuet et ne semble être vraiment utilisé/appliquée par Internet Explorer (IE).
L'explication la plus simple est: IE veut, vous pouvez définir un en-tête P3P si vous êtes en utilisant des cookies.
C'est une belle idée, et heureusement, la plupart du temps ne fournissant pas de cet en-tête ne causera pas de problèmes (lire navigateur mises en garde). À moins que votre site/application web est chargé dans un autre site web à l'aide d'un (i)Cadre. C'est là que IE devient une énorme douleur dans le ***. Il ne vous permettra pas de définir un cookie, sauf si l'en-tête P3P est réglé.
Sachant ce que je voulais trouver une réponse aux deux questions suivantes:
Mes conclusions sont les suivantes:
Le concept est né en 2002 et il me déroute que ce obsolètes et juridiquement non implémenté le concept est encore forcé sur les développeurs au sein de l'IE.
Si cet en-tête n'ont pas des conséquences juridiques de cet en-tête doit être ignoré (ou, alternativement, de générer une alerte ou une notification dans la console). Pas forcée! Je suis maintenant obligé de mettre une ligne dans mon code (et envoyer un en-tête pour le client) qui ne fait absolument rien.
À court de garder IE heureux - ajouter la ligne suivante dans votre code PHP (d'Autres langues doit ressembler)
Problème résolu, et IE est heureux avec cette pomme de terre.
Potato
dans mon P3P résolu. haha!header('P3P: CP="Potatoe"');
J'ai été en mesure de faire le mauvais œil s'en aller tout simplement par l'ajout de ce petit en-tête du site dans l'IFrame (solution PHP):
Rappelez-vous d'appuyer sur ctrl+F5 pour recharger votre site ou Explorer peut encore montrer le mauvais œil, malgré le fait que ça fonctionne. C'est probablement la principale raison pour laquelle j'ai eu beaucoup de problèmes à la faire fonctionner.
Pas de politique de fichier est nécessaire à tous.
Edit:
J'ai trouvé une belle entrée de blog qui explique le problème avec les cookies dans les IFrames. Il dispose également d'une solution rapide dans le code C#:
Images, des Pages ASPX et Rejeté des Témoins
CP="This_is_not_a_privacy_policy"
. Faire qui semble de moins en moins juridiquement contraignant, je pense (car par exemple, NOI et STP et rien de tel que à tous, est mentionné), et apparemment IE heureux 🙂C'est caché dans les commentaires d'autres réponses, mais j'ai presque manqué, de sorte qu'il semble qu'il mérite sa propre réponse.
À l'examen: pour IE accepter 3rd party cookies, vous devez vous servir de vos fichiers avec un en-tête http appelée p3p dans le format:
MAIS, p3p est assez mort comme une norme à ce point, et vous pouvez facilement obtenir IE de travailler sans investir le temps et les ressources juridiques à la création d'une véritable politique p3p. C'est parce que si votre compact politique p3p en-tête n'est pas valide, c'est à dire en fait la traite comme une bonne politique et accepte 3rd party cookies. Ainsi, vous pouvez utiliser un en-tête p3p comme ce
Vous pouvez éventuellement inclure un lien vers une page qui explique pourquoi vous n'avez pas une politique p3p, comme Google et Facebook n' (ils point ici: https://support.google.com/accounts/answer/151657 et ici: https://www.facebook.com/help/327993273962160/).
Enfin, il est important de noter que tous les fichiers servis à partir de la 3ème partie du site besoin d'avoir l'en-tête p3p, pas seulement celui qui donne le cookie, donc vous ne pouvez pas être en mesure de faire ça en PHP, asp.net, etc code. Vous êtes probablement mieux de réglage sur le web, au niveau du serveur (c'est à dire dans IIS ou Apache).
J'ai eu ce problème aussi, j'ai pensé poster le code que j'ai utilisé dans mon MVC2 projet. Soyez prudent lorsque dans la page cycle de vie vous ajouter dans l'en-tête ou vous aurez un HttpException "Serveur est impossible d'ajouter des en-tête après les en-têtes HTTP ont été envoyés." J'ai utilisé une coutume ActionFilterAttribute sur le OnActionExecuting méthode (appelée avant l'exécution de l'action).
Exemple d'utilisation:
C'est un grand sujet sur la question, mais j'ai trouvé qu'un détail d'importance (ce qui est essentiel, au moins dans mon cas) qui n'a pas été posté ici ou ailleurs (je m'excuse si j'ai juste raté) était que le P3P ligne doit être transmis dans l'en-tête de CHAQUE d'envoyer le fichier à partir de la 3ème partie serveur, même les fichiers à ne pas fixer ou en utilisant les cookies tels que Javascript, des fichiers ou des images. Sinon, les cookies seront bloqués. J'ai plus à ce sujet dans un post ici: http://posheika.net/?p=110
Toute personne ayant ce problème dans node.js.
Puis ajouter ce p3p module, et d'activer ce module dans le middleware.
Je suis express, donc je l'ajoute dans app.js
Dans un premier temps que module dans app.js
ensuite l'utiliser en tant que middleware
Il va ajouter p3p en-têtes au res de l'objet. Pas besoin de faire des choses extra.
Vous obtiendrez plus d'informations à:
https://github.com/troygoode/node-p3p
Si quelqu'un est à la recherche d'Apache ligne; nous avons utilisé celui-ci.
Il n'a pas vraiment d'importance ce que nous nous sommes CP valeur, tant qu'il est l'en-tête P3P.
Une chose à faire est d'ajouter le domaine à des sites autorisés dans outils -> options internet -> vie privée -> sites: somedomain.com -> allow -> OK.
Ce post fournit des commentaires sur la norme P3P et une petite solution qui réduit les problèmes avec IE7 et IE8.
Une solution que je n'ai pas vu mentionné ici, est à l'aide de stockage de session à la place de cookies.
Bien sûr, cela peut ne pas convenir à tout le monde à ses exigences, mais pour certains cas, c'est une solution facile.
J'étais en train d'étudier ce problème de connexion-off via le Contrôle d'Accès Azure Services, et n'a pas pu se connecter à la tête et de la queue de quoi que ce soit.
Alors, suis tombé sur ce post https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/
En bref, c'est à dire ne pas partager des cookies dans l'ensemble des zones (par exemple. Internet /sites de Confiance).
Donc, si votre IFrame cible et une page html dans les différentes zone de P3P ne va pas aider avec quoi que ce soit.
Eu ce genre de problème, est également allé à enquêter sur la façon de générer la politique P3P ce matin, voici mon post sur la façon de générer votre propre politique et de l'utilisation du site web 🙂
http://everydayopenslikeaflower.blogspot.com/2009/08/how-to-create-p3p-policy-and-implement.html
J'ai mis en place une politique P3P complète avant, mais ne veulent pas passer par les tracas de nouveau pour un nouveau projet sur lequel je travaillais. J'ai trouvé ce lien très utile pour une solution simple au problème de n'avoir qu'à spécifier un minimum de politique P3P compacte de "CAO PSA NOTRE":
http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html
L'article cite une (aujourd'hui cassée) lien vers un article de base de connaissances Microsoft. La politique a fait l'affaire pour moi!
Vous pouvez également combiner les p3p.xml et policy.xml les fichiers en tant que tel:
/home/ubuntu/sites/shared/w3c/p3p.xml
J'ai trouvé la façon la plus simple pour ajouter un en-tête de est proxy avec Apache et l'utilisation mod_headers, en tant que tel:
Nous avons donc proxy toutes les demandes à l'exception de celles /w3c/p3p.xml à notre serveur d'application.
Vous pouvez tester tout cela avec la Le validateur du W3C
Si vous êtes propriétaire du domaine qui doit être intégrée, ensuite, vous pouvez, avant l'appel de la page qui contient l'IFrame, redirection de domaine, ce qui permettra de créer le cookie et de redirection,
comme expliqué ici: http://www.mendoweb.be/blog/internet-explorer-safari-third-party-cookie-problem/
Cela fonctionne pour Internet Explorer, mais pour Safari (Safari bloque également les cookies tiers).
Je sais que c'est un peu tard pour mettre ma contribution sur ce sujet, mais j'ai perdu de nombreuses heures que peut-être cette réponse sera aider quelqu'un.
J'ai essayé d'appeler un témoin de tiers sur mon site et bien sûr, il ne fonctionne pas sur Internet Explorer 10, même à un faible niveau de sécurité... ne me demandez pas pourquoi. Dans l'iframe, j'ai été l'appel d'une read_cookie.php (echo $_COOKIE) avec l'ajax.
Et je ne sais pas pourquoi j'ai été incapable de définir la politique P3P pour résoudre le problème...
Au cours de ma recherche, j'ai vu quelque chose au sujet d'obtenir le cookie en JSON de travail. Je n'ai pas encore essayer car je pensais que si le témoin ne passe pas à travers un iframe, il ne passe plus à travers un éventail...
Devinez quoi, il le fait! Donc, si vous json_encode votre cookie décoder ensuite suivant votre requête ajax, vous l'aurez!
Peut-être il ya quelque chose que j'ai raté, et si je l'ai fait, toutes mes excuses, mais je n'ai jamais vu quelque chose d'aussi stupide. Bloquer les cookies tiers pour la sécurité, pourquoi pas, mais de le laisser passer si codé? Où est la sécurité?
J'espère que ce post aidera à quelqu'un et encore, si j'ai raté quelque chose et que je suis bête, merci de m'éduquer!
Ce finalement fonctionné pour moi (après beaucoup de tracas et de générer des stratégies à l'aide d'Ibm générateur de politique). Vous pouvez télécharger le générateur de politique ici: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml
Je n'ai pas pu télécharger le générateur de l'officiel IBM site plus.
J'ai créé ces fichiers dans le dossier racine de mon Application Web
HTML:
Dans les Rails, je suis en utilisant ce bijou : https://github.com/merchii/rack-iframe
Bawically il définit un ensemble d'abréviations sans un fichier de référence: https://github.com/merchii/rack-iframe/blob/master/lib/rack/iframe.rb#L8
Il est facile à installer lorsque vous n'avez pas de soins sur le sens de la p3p choses.
Pour toute personne qui cherche à obtenir le P3P Compacte de travail sur les Politiques avec le contenu statique:
Il est seulement possible si vous êtes en mesure d'envoyer personnalisés côté serveur en-têtes de réponse avec le contenu statique.
Pour une explication plus détaillée, voir ma réponse ici: Ensemble P3P code en HTML
Dans les Rails 3.2, je suis en utilisant:
J'ai obtenu ce à partir de: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html
Une meilleure solution serait de faire un appel Ajax à l'intérieur de l'iframe à la page qui serait get/set cookies...