J'ai deux sites Web, disons qu'ils sont example.com
et anotherexample.net
. Sur anotherexample.net/page.html
, j'ai un IFRAME SRC="http://example.com/someform.asp"
. Cet IFRAME affiche un formulaire à remplir et à soumettre à l'utilisateur http://example.com/process.asp
. Lorsque j'ouvre le formulaire (" someform.asp
") dans sa propre fenêtre de navigateur, tout fonctionne bien. Cependant, lorsque je charge someform.asp
en tant qu'IFRAME dans IE 6 ou IE 7, les cookies pour example.com ne sont pas enregistrés. Dans Firefox, ce problème n'apparaît pas.
À des fins de test, j'ai créé une configuration similaire sur http://newmoon.wz.cz/test/page.php .
example.com
utilise des sessions basées sur les cookies (et je ne peux rien y faire), donc sans cookies, process.asp
ne s'exécutera pas. Comment forcer IE à enregistrer ces cookies?
Résultats du reniflement du trafic HTTP: sur la réponse GET /someform.asp, il y a un en-tête Set-Cookie valide par session (par exemple Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY
), mais sur la demande POST /process.asp, il n'y a aucun en-tête Cookie.
Edit3: certains scripts AJAX + côté serveur sont apparemment capables de contourner le problème, mais cela ressemble beaucoup à un bug, et il ouvre un tout nouvel ensemble de failles de sécurité . Je ne veux pas que mes applications utilisent une combinaison de bug + trou de sécurité juste parce que c'est facile.
Edit: la politique P3P était la cause première , explication complète ci-dessous.
la source
Réponses:
Je l'ai fait fonctionner, mais la solution est un peu complexe, alors restez avec moi.
Que ce passe-t-il
En l'état, Internet Explorer accorde un niveau de confiance plus faible aux pages IFRAME (IE appelle ce contenu "tiers"). Si la page à l'intérieur de l'IFRAME n'a pas de politique de confidentialité, ses cookies sont bloqués (ce qui est indiqué par l'icône en forme d'œil dans la barre d'état, lorsque vous cliquez dessus, il vous montre une liste d'URL bloquées).
(source: piskvor.org )
Dans ce cas, lorsque les cookies sont bloqués, l'identifiant de session n'est pas envoyé et le script cible génère une erreur «session introuvable».
(J'ai essayé de définir l'identifiant de session dans le formulaire et de le charger à partir des variables POST. Cela aurait fonctionné , mais pour des raisons politiques, je n'ai pas pu le faire.)
Il est possible de rendre la page à l'intérieur de l'IFRAME plus fiable: si la page intérieure envoie un en-tête P3P avec une politique de confidentialité acceptable pour IE, les cookies seront acceptés .
Comment le résoudre
Créer une politique p3p
Un bon point de départ est le tutoriel W3C . Je l'ai parcouru, téléchargé l' éditeur de politique de confidentialité IBM et là j'ai créé une représentation de la politique de confidentialité et lui ai donné un nom pour y faire référence (ici c'était
policy1
).REMARQUE : à ce stade, vous devez réellement savoir si votre site a une politique de confidentialité, et sinon, la créer - s'il collecte des données utilisateur, quel type de données, ce qu'il en fait, qui y a accès, etc. Vous devez trouver ces informations et y réfléchir . Gifler ensemble quelques balises ne le coupera pas.Cette étape ne peut pas être effectuée uniquement par logiciel et peut être très politique (par exemple, "devrions-nous vendre nos statistiques de clics?").
(par exemple, "le site est exploité par ACME Ltd., il utilise des identifiants anonymes par session pour son fonctionnement, recueille des données utilisateur uniquement si cela est explicitement autorisé et uniquement aux fins suivantes, les données ne sont stockées que le temps nécessaire, uniquement notre société y a accès, etc. etc. ").
(Lors de l'édition avec cet outil, il est possible de voir les erreurs / omissions dans la politique. L'onglet "Politique HTML" est également très utile: en bas, il a une "Évaluation de la politique" - une vérification rapide si la politique sera bloquée par les paramètres par défaut d'IE)
L'éditeur exporte vers un fichier .p3p, qui est une représentation XML de la stratégie ci-dessus. En outre, il peut exporter une "version compacte" de cette stratégie.
Lien vers la politique
Ensuite, un fichier de référence de politique (
http://example.com/w3c/p3p.xml
) était nécessaire (un index des politiques de confidentialité que le site utilise):Le
<INCLUDE>
affiche tous les URI qui utiliseront cette politique (dans mon cas, l'ensemble du site). Le fichier de stratégie que j'ai exporté à partir de l'éditeur a été téléchargé surhttp://example.com/w3c/example-com.p3p
Envoyer l'en-tête compact avec les réponses
J'ai configuré le serveur Web sur example.com pour envoyer l'en-tête compact avec des réponses, comme ceci:
policyref
est un URI relatif au fichier de référence de politique (qui à son tour fait référence aux politiques de confidentialité),CP
est la représentation de politique compacte. Notez que la combinaison d'en-têtes P3P dans l'exemple peut ne pas être applicable sur votre site Web spécifique; vos en-têtes P3P DOIVENT véritablement représenter votre propre politique de confidentialité!Profit!
Dans cette configuration, le Evil Eye n'apparaît pas, les cookies sont enregistrés même dans l'IFRAME et l'application fonctionne.
Modifier: ce qu'il ne faut pas faire, sauf si vous aimez vous défendre contre les poursuites
Plusieurs personnes ont suggéré de "simplement insérer quelques balises dans votre en-tête P3P, jusqu'à ce que le mauvais œil abandonne".
Les balises ne sont pas seulement un tas de bits, elles ont une signification réelle et leur utilisation vous donne des responsabilités réelles !
Par exemple, prétendre que vous ne collectez jamais de données utilisateur peut rendre le navigateur heureux, mais si vous collectez réellement des données utilisateur, le P3P est en conflit avec la réalité. Clairement et simplement, vous mentez délibérément à vos utilisateurs , et cela peut être un comportement criminel dans certains pays. Comme dans «aller en prison, ne pas percevoir 200 $».
Quelques exemples ( voir p3pwriter pour l'ensemble complet des balises ):
STP
mais n'avez pas de politique de rétention, vous risquez de commettre une fraude. C'est cool? Pas du tout.)Je ne suis pas avocat, mais je ne suis pas prêt à aller en justice pour voir si l'en-tête P3P est vraiment juridiquement contraignant ou si vous pouvez promettre quoi que ce soit à vos utilisateurs sans réellement vouloir honorer vos promesses.
la source
J'ai passé une grande partie de ma journée à étudier ce truc P3P et je ressens le besoin de partager ce que j'ai découvert.
J'ai remarqué que le concept P3P est très dépassé et ne semble être vraiment utilisé / appliqué que par Internet Explorer (IE).
L'explication la plus simple est: IE veut que vous définissiez un en-tête P3P si vous utilisez des cookies.
C'est une bonne idée, et heureusement la plupart du temps, ne pas fournir cet en-tête ne causera aucun problème (lire les avertissements du navigateur). À moins que votre site Web / application Web ne soit chargé sur 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 défini.
Sachant cela, je voulais trouver une réponse aux deux questions suivantes:
Mes conclusions sont les suivantes:
Le concept est né en 2002 et cela me déconcerte que ce concept obsolète et juridiquement non implémenté soit toujours imposé aux développeurs au sein d'IE. Si cet en-tête n'a pas de ramifications légales, cet en-tête doit être ignoré (ou alternativement, générer un avertissement ou une notification dans la console). Non appliqué! Je suis maintenant obligé de mettre une ligne dans mon code (et d'envoyer un en-tête au client) qui ne fait absolument rien.
En bref - pour garder IE heureux - ajoutez la ligne suivante à votre code PHP (les autres langues devraient ressembler)
Problème résolu et IE est satisfait de cette pomme de terre.
la source
Potato
mon P3P l'a résolu. haha!J'ai pu faire disparaître le mauvais œil en ajoutant simplement ce petit en-tête au site dans l'IFrame (solution PHP):
N'oubliez pas d'appuyer sur ctrl + F5 pour recharger votre site ou l'Explorateur peut toujours montrer le mauvais œil, malgré le fait que cela fonctionne bien. C'est probablement la principale raison pour laquelle j'ai eu tant de problèmes à le faire fonctionner.
Aucun dossier de politique n'était nécessaire.
Edit: J'ai trouvé une belle entrée de blog qui explique le problème avec les cookies dans IFrames. Il a également une solution rapide dans le code C #: cadres, pages ASPX et cookies rejetés
la source
CP="This_is_not_a_privacy_policy"
. Faire cela semble moins juridiquement contraignant, je pense (puisque par exemple NOI et STP et rien de tout cela n'est mentionné), et rend apparemment heureux IE :-)Ceci est enterré dans les commentaires des autres réponses, mais je l'ai presque manqué, il semble donc qu'il mérite sa propre réponse.
Pour vérifier: pour qu'IE accepte les cookies tiers, vous devez servir vos fichiers avec un en-tête http appelé p3p au format:
MAIS, p3p est à peu près mort en tant que norme à ce stade et vous pouvez facilement faire fonctionner IE sans investir le temps et les ressources juridiques dans la création d'une véritable politique p3p. En effet, si votre en-tête de politique p3p compact n'est pas valide, IE le traite réellement comme une bonne politique et accepte les cookies tiers. Vous pouvez donc utiliser un en-tête p3p tel que celui-ci
Vous pouvez éventuellement inclure un lien vers une page qui explique pourquoi vous n'avez pas de politique p3p, comme le font Google et Facebook (ils pointent 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 du site tiers doivent avoir l'en-tête p3p, pas seulement celui qui définit le cookie, donc vous ne pourrez peut-être pas le faire simplement dans votre PHP, asp.net, etc. code. Vous feriez probablement mieux de vous installer au niveau du serveur Web (c'est-à-dire dans IIS ou Apache).
la source
J'ai également eu ce problème, j'ai pensé publier le code que j'ai utilisé dans mon projet MVC2. Soyez prudent lorsque dans le cycle de vie de la page que vous ajoutez dans l'en-tête ou vous obtiendrez une HttpException "Le serveur ne peut pas ajouter d'en-tête après l'envoi des en-têtes HTTP ." J'ai utilisé un ActionFilterAttribute personnalisé sur la méthode OnActionExecuting (appelée avant l'exécution de l'action).
Exemple d'utilisation:
la source
C'est un excellent sujet sur la question, mais j'ai trouvé qu'un détail important (qui était essentiel au moins dans mon cas) qui n'a pas été affiché ici ou ailleurs (je m'excuse si je l'ai juste raté) était que la ligne P3P doit être transmis dans l'en-tête de CHAQUE fichier envoyé depuis le serveur tiers, même les fichiers ne définissant pas ou n'utilisant pas les cookies tels que les fichiers Javascript ou les images. Sinon, les cookies seront bloqués. J'ai plus à ce sujet dans un post ici: http://posheika.net/?p=110
la source
Toute personne ayant ce problème dans node.js.
Ajoutez ensuite ce module p3p et activez ce module dans le middleware.
J'utilise express donc je l'ajoute dans app.js
Exigez d'abord ce module dans app.js
puis l'utiliser comme middleware
Il ajoutera des en-têtes p3p à l'objet res. Pas besoin de faire des choses supplémentaires.
Vous obtiendrez plus d'informations sur:
https://github.com/troygoode/node-p3p
la source
Si quelqu'un recherche la ligne Apache; nous avons utilisé celui-ci.
Peu importe la valeur de CP que nous définissons, tant qu'il y a l'en-tête P3P.
la source
Une chose possible à faire est d'ajouter le domaine aux sites autorisés dans les outils -> options Internet -> confidentialité -> sites: somedomain.com -> autoriser -> OK.
la source
Cet article fournit des commentaires sur P3P et une solution de raccourci qui réduit les problèmes avec IE7 et IE8.
la source
Une solution que je n'ai pas vue mentionnée ici, utilise le stockage de session au lieu des cookies. Bien sûr, cela pourrait ne pas répondre aux exigences de tout le monde, mais dans certains cas, c'est une solution facile.
la source
J'examinais ce problème en ce qui concerne la connexion via Azure Access Control Services, et je n'ai pas pu connecter la tête et la queue de quoi que ce soit.
Ensuite, tombé sur ce post https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/
En bref, IE ne partage pas les cookies entre les zones (par exemple, Internet vs sites de confiance).
Donc, si votre cible IFrame et votre page html sont dans une zone différente, le P3P ne vous aidera à rien.
la source
Vous avez un problème similaire, je suis également allé chercher comment générer la politique P3P ce matin, voici mon article sur la façon de générer votre propre politique et de l'utiliser sur le site Web :) http://everydayopenslikeaflower.blogspot.com/2009/08/ comment-créer-p3p-politique-et-implémenter.html
la source
J'ai déjà mis en œuvre une politique P3P complète, mais je ne voulais pas recommencer pour un nouveau projet sur lequel je travaillais. J'ai trouvé ce lien utile pour une solution simple au problème, n'ayant qu'à spécifier une politique P3P compacte minimale de "CAO PSA OUR":
http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html
L'article cite un lien (désormais rompu) vers un article Microsoft KB. La politique a fait l'affaire pour moi!
la source
Vous pouvez également combiner les fichiers p3p.xml et policy.xml en tant que tels:
/home/ubuntu/sites/shared/w3c/p3p.xml
J'ai trouvé que le moyen le plus simple d'ajouter un en-tête est un proxy via Apache et d'utiliser mod_headers, en tant que tel:
Nous procurons donc toutes les demandes, sauf celles à /w3c/p3p.xml, à notre serveur d'applications.
Vous pouvez tout tester avec le validateur W3C
la source
Si vous possédez le domaine qui doit être incorporé , vous pouvez, avant d'appeler la page qui contient l'IFrame, rediriger vers ce domaine, qui créera le cookie et redirigera, comme expliqué ici: http: //www.mendoweb. être / blog / internet-explorer-safari-tiers-cookie-problem /
Cela fonctionnera pour Internet Explorer mais aussi pour Safari (car Safari bloque également les cookies tiers).
la source
Je sais qu'il est un peu tard pour mettre ma contribution sur ce sujet mais j'ai perdu tellement d'heures que peut-être cette réponse va aider quelqu'un.
J'essayais d'appeler un cookie tiers sur mon site et bien sûr, cela ne fonctionnait pas sur Internet Explorer 10, même à un faible niveau de sécurité ... ne me demandez pas pourquoi. Dans l'iframe, j'appelais un read_cookie.php (echo $ _COOKIE) avec ajax.
Et je ne sais pas pourquoi j'ai été incapable de définir la politique P3P pour résoudre le problème ...
Pendant ma recherche, j'ai vu quelque chose sur le fonctionnement du cookie dans JSON. Je n'essaye même pas car je pensais que si le cookie ne passait pas par un iframe, il ne passerait plus par un tableau ...
Devinez quoi, ça le fait! Donc, si vous json_encode votre cookie puis décodez après votre demande ajax, vous l'obtiendrez!
Peut-être qu'il y a 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 des raisons de sécurité, pourquoi pas, mais laisser passer s'ils sont encodés? Où est la sécurité maintenant?
J'espère que ce message aidera quelqu'un et encore, si j'ai raté quelque chose et que je suis stupide, s'il vous plaît éduquez-moi!
la source
Cela a finalement fonctionné pour moi (après beaucoup de hâte et de génération de politiques à l'aide du générateur de politiques d'IBM). Vous pouvez télécharger le générateur de règles ici: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml
Je ne pouvais plus télécharger le générateur depuis le site officiel d'IBM.
J'ai créé ces fichiers dans le dossier racine de ma Web-App
la source
Dans Rails, j'utilise ce joyau: https://github.com/merchii/rack-iframe Bawically, il définit un ensemble d'abréviations sans fichier de référence: https://github.com/merchii/rack-iframe/blob/master /lib/rack/iframe.rb#L8
Il est facile à installer lorsque vous ne vous souciez pas du tout de la signification des éléments p3p.
la source
Pour tous ceux qui essaient de faire fonctionner la stratégie compacte P3P avec du contenu statique:
Cela n'est possible que si vous pouvez envoyer des en-têtes de réponse côté serveur personnalisés avec le contenu statique.
Pour une explication plus détaillée, voir ma réponse ici: Définir le code P3P en HTML
la source
Dans Rails 3.2, j'utilise:
Je l'ai obtenu de: http://dot-net-web-developer-bristol.blogspot.com/2012/04/setting-p3p-header-in-rails-session.html
la source
Une meilleure solution serait de faire un appel Ajax à l'intérieur de l'iframe vers la page qui obtiendrait / définirait les cookies ...
la source