Cookie bloqué / non enregistré dans IFRAME dans Internet Explorer


392

J'ai deux sites Web, disons qu'ils sont example.comet 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.aspen 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.comutilise des sessions basées sur les cookies (et je ne peux rien y faire), donc sans cookies, process.aspne 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.


une bonne solution en effet .. j'ai essayé de créer la politique de confidentialité .. ajoutée à ma racine de contexte ... et dans ma page jsp je mets l'en-tête .. toujours pas en mesure de me débarrasser de cet oeil rouge .. pouvez-vous aider me résoudre le problème ..
user902490


@ makerofthings7: YW. Je vais le migrer vers un site non temporaire (sic!) Et je proposerai une modification sur Security.se, cette page était une preuve de concept quelque peu hacky.
Piskvor a quitté le bâtiment

2
Ne vous embêtez pas à essayer de faire fonctionner P3P dans Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ). P3P ne fonctionne pas du tout, donc quoi que vous fassiez, les cookies ne seront pas stockés. La preuve ici aussi bien enhanie.com/test/cookie
puco

Réponses:


429

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

le mauvais œil
(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'étaitpolicy1 ).

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

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

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:

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

policyrefest un URI relatif au fichier de référence de politique (qui à son tour fait référence aux politiques de confidentialité), CPest 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 ):

  • NOI : "Le site Web ne recueille pas de données identifiées." (dès qu'il y a une personnalisation, une connexion ou toute collecte de données (***** Analytics, n'importe qui?), vous devez le reconnaître dans votre P3P)
  • STP : Les informations sont conservées pour répondre à l'objectif déclaré. Cela nécessite que les informations soient rejetées le plus tôt possible. Les sites DOIVENT avoir une politique de rétention qui établit un calendrier de destruction. La politique de rétention DOIT être incluse ou liée à partir de la politique de confidentialité lisible par l'homme du site. "(Donc si vous envoyez STPmais 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.


J'étais complet à 95%, mais mon en-tête ne disait que: P3P: CP = "...." et n'incluait pas le lien policyref, qui le faisait fonctionner dans IE7, mais pas IE6 ... fonctionne bien maintenant. Merci!
AndreasKnudsen

4
Le lien vers l'éditeur IBM ne fonctionne plus. Grâce à The Wayback Machine, j'ai pu trouver ce lien de travail: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234

34
Quelques nouvelles sur ce sujet: -L'éditeur IBM peut être trouvé sur: softpedia.com/get/Security/Security-Related/… -Les normes P3P semblent être «mortes». Les grandes entreprises comme Google et Facebook utilisent désormais des en-têtes P3P non valides pour contourner la sécurité IE. Voir ces articles: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/… techpolicy.com/…
Davide Icardi

7
Une autre information qui peut aider quelqu'un avec un problème similaire: d'après mes tests si les domaines se trouvent dans différentes zones de sécurité (par exemple, le premier est Internet et le tiers est l'intranet), il n'est pas possible d'accepter un cookie tiers également si P3P est correctement configuré. Le cookie est toujours bloqué.
Davide Icardi

1
Il est important de noter que le terme «tiers» n'est pas aussi clair qu'on pourrait le penser. Si un iframe a un contenu tiers par rapport au site englobant et a une politique de confidentialité valide, et qu'il redirige vers une vue dans l'iframe qui provient du site principal, à moins que cette vue n'ait une politique de confidentialité valide, IE ne le fera pas faites confiance à ses cookies. Même si cette vue provient du même site que celui contenant l'iframe.
Tarifs

168

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:

  1. On s'en fout? En d'autres termes, puis-je être poursuivi si je mets le mot «pomme de terre» dans l'en-tête?
  2. Que font les autres entreprises?

Mes conclusions sont les suivantes:

  1. Personne ne s'y intéresse. Je ne parviens pas à trouver un seul document suggérant que cette technologie ait un poids juridique. Au cours de mes recherches, je n'ai trouvé aucun pays dans le monde qui ait adopté une loi qui vous empêche de mettre le mot "pomme de terre" dans l'en-tête P3P
  2. Google et Facebook ont ​​mis un lien dans leur champ d'en-tête P3P faisant référence à une page décrivant pourquoi ils n'ont pas d'en-tête P3P.

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)

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

Problème résolu et IE est satisfait de cette pomme de terre.


6
En effet, le problème a considérablement changé depuis 2008, date à laquelle il a été publié. Le Web a évolué et le consensus sur le P3P s'est résolu à «plus personne ne s'en soucie». Bon à savoir ce que fait IE avec une entrée invalide dans ce cas.
Piskvor a quitté le bâtiment

19
Oh mec, c'est l'un de ces joyaux cachés d'Internet Explorer! HttpContext.Current.Response.AddHeader ("p3p", "CP = \" Internet Explorer a été programmé par des idiots \ ""); Celui-là fonctionne pour moi!
Michiel Cornille

6
@Mvision Ne blâmez pas les développeurs, c'est plutôt un problème lié aux avocats et à la gestion? Je suppose que la plupart des développeurs ont réalisé que la fonctionnalité entraînerait des solutions similaires à Potato :-)
KajMagnus

5
Pour ASP.Net, vous pouvez l'ajouter à votre configuration Web: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & quot; Internet Explorer requiert ceci dans l'ordre pour Définir des cookies tiers & quot; " /> </customHeaders> </httpProtocol> </handlers> </system.webServer> '
Rick Kierner

1
Oh, cela doit être plus élevé! J'ai passé des heures à essayer de faire fonctionner les cookies dans un iframe IE 11. Essayer toutes sortes de combinaisons P3P et obtenir divers résultats en fonction du type / expiration du cookie. Enfin, mettre Potatomon P3P l'a résolu. haha!
dtbaker

55

J'ai pu faire disparaître le mauvais œil en ajoutant simplement ce petit en-tête au site dans l'IFrame (solution PHP):

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

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


10
IANAL, mais la politique P3P semble être juridiquement contraignante. Êtes - vous au courant de ce que vous êtes en promettant aux utilisateurs ici, ou vous avez simplement mélanger des étiquettes jusqu'à ce que le evileye a disparu? Je pense que la mise en cache du navigateur ne sera pas votre plus gros problème avec ceux-ci: " NOI : Le site Web ne collecte pas de données identifiées. STP : Les informations sont conservées pour répondre à l'objectif déclaré. Cela nécessite que les informations soient rejetées le plus tôt possible. Les sites DOIVENT avoir une politique de rétention qui établit un calendrier de destruction. La politique de rétention DOIT être incluse ou liée à partir de la politique de confidentialité lisible par l'homme du site. "
Piskvor a quitté le bâtiment le

28
Je dois admettre que je ne me soucie pas vraiment de ce que cela signifie, j'avais juste besoin de choses pour travailler dans Explorer. Les sites sont nos propres sites non publics, dont l'un utilise un cookie pour «se souvenir» du style dans lequel afficher le site. Donc, oui, j'ai simplement mélangé les balises jusqu'à ce que le mauvais œil disparaisse.
Helo

Trouvé une belle entrée de blog qui explique le problème ici: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo

6
L'insignifiance croissante du P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Si elle est si juridiquement contraignante, il y aurait préséance de poursuites en le prouvant maintenant. Il est considéré avec une si haute estime que tous mes concurrents sauf un se donnent même la peine d'en poster un en premier lieu. Ils doivent comprendre que si leurs clients ne peuvent pas laisser le paramètre IE sur Medium, ils n'en valent pas la peine. Les ventes perdues sur un site devraient être assez élevées si les cookies ne fonctionnent pas, le panier meurt sans eux.
Fiasco Labs

3
Cette réponse suggère d'utiliser un en-tête factice comme 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 :-)
KajMagnus

21

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:

CP="my compact p3p policy"

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

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

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


20

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

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

Exemple d'utilisation:

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

        return View();
    }

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

14

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


5

Toute personne ayant ce problème dans node.js.

Ajoutez ensuite ce module p3p et activez ce module dans le middleware.

npm install p3p

J'utilise express donc je l'ajoute dans app.js

Exigez d'abord ce module dans app.js

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

puis l'utiliser comme middleware

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

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


5

Si quelqu'un recherche la ligne Apache; nous avons utilisé celui-ci.

Jeu d'en-têtes P3P "CP = \" Merci IE8 \ ""

Peu importe la valeur de CP que nous définissons, tant qu'il y a l'en-tête P3P.


4

Une chose possible à faire est d'ajouter le domaine aux sites autorisés dans les outils -> options Internet -> confidentialité -> sites: somedomain.com -> autoriser -> OK.


23
Oui, si vous vous souciez seulement que cela fonctionne sur votre ordinateur. Pas tout à fait pratique de suggérer cela à chaque visiteur.
Piskvor a quitté le bâtiment le

3

Cet article fournit des commentaires sur P3P et une solution de raccourci qui réduit les problèmes avec IE7 et IE8.


1
Pour citer l'article: "il dit essentiellement" Nous ne collectons aucune de vos données personnelles "" - bonne chance avec ça. J'ai vu zéro sites qui remplissent réellement les jetons définis dans cette politique (ne collectant aucune donnée , pas même des données statistiques anonymes - journaux d'accès au serveur, n'importe qui?). L'autre politique proposée est également assez difficile à réaliser (vous avez une sorte d'analyse Web? Bam, vous venez de rompre votre politique P3P). Ainsi, l'article peut être résumé comme «mentez simplement de façon flagrante, personne ne s'en soucie de toute façon». L'article le plus utile sur tout Internet , en effet.
Piskvor a quitté le bâtiment le

Pour citer une autre partie de l'article: "Il y a étonnamment peu de bonnes informations gratuites sur Internet sur P3P, les politiques compactes et les exigences d'IE7 - et IE7 ne donne absolument aucune sortie de débogage utile, comme la raison pour laquelle votre cookie a été bloqué." Cela semble être tout à fait vrai! Ayant passé la majeure partie de ma journée à essayer de comprendre pourquoi IE7 / 8 se comportait différemment de tous les autres navigateurs, j'étais extrêmement heureux de trouver ce message. Il est probablement temps de se rendre compte que P3P est une spécification morte et que la plupart des gens préfèrent simplement contourner ce problème. Ce billet est probablement le plus utile sur le sujet.
Henrik Aasted Sørensen

"Il y a étonnamment peu de bonnes informations gratuites sur Internet" - cela aurait pu être vrai en 2007 (quand cela a été écrit), mais il y a beaucoup d'informations sur Internet maintenant, même des outils gratuits qui vous aident à construire la politique P3P selon votre situation spécifique.Je ne défends pas le P3P, mais dire "hein, il suffit de le faire disparaître" peut avoir des conséquences coûteuses (car vous faites des déclarations très claires sur votre site). Je n'ai pas encore été testé (IIRC), mais je ne voudrais pas être à la traîne de ce procès.
Piskvor a quitté le bâtiment le

1
@Piskvor - Veuillez publier les outils P3P gratuits. Tous ceux que j'essaie d'aller ont été achetés par des fermes de liens et de fausses recherches. IBM a retiré son outil gratuit. Le soutien du P3P semble être comme l'herbe mourant lors d'une sécheresse en 2012.
Fiasco Labs

2
Vous avez trouvé l'éditeur IBM Alphaworks p3p ici sur softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs

3

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.


1
Bon point. Notez qu'au moment où cette question a été publiée, la prise en charge du stockage de session était inexistante, en particulier dans IE. Mais les temps changent;)
Piskvor a quitté le bâtiment le

3

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.


Je suis surpris que cela soit toujours d'actualité en 2016 :)
Piskvor a quitté le bâtiment le

1
L'état de P3P dans IE est documenté ici: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , l'avenir s'annonce brillant :)
Frode Nilsen


2

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!


1

Vous pouvez également combiner les fichiers p3p.xml et policy.xml en tant que tels:

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

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:

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

Nous procurons donc toutes les demandes, sauf celles à /w3c/p3p.xml, à notre serveur d'applications.

Vous pouvez tout tester avec le validateur W3C


Est-ce que cela envoie l'en-tête avec 304 demandes? Certaines versions d'IE supprimeront les cookies si vous envoyez un en-tête P3P avec un 304.
Joshua

Désolé, je ne sais pas car je ne travaille plus sur ce code. Si c'est un problème, vous pouvez probablement forcer le code d'état dans Apache à 200.
Kris


1

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!


Intéressant ... vous décodez donc le cookie dans JS?
Piskvor a quitté le bâtiment

Non, j'écris simplement le cookie dans un tableau JSON avec la fonction php json_encode () puis je reviens via un appel ajax JSON.
pierreaurelemartin

1

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

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Envoyez simplement un en-tête supplémentaire:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Contenu de p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Contenu de mon fichier 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. Contenu de 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>

Il va au répertoire du serveur de fenêtre parent ou au répertoire du serveur iframe?
JackTheKnife


0

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



-1

Une meilleure solution serait de faire un appel Ajax à l'intérieur de l'iframe vers la page qui obtiendrait / définirait les cookies ...


1
AJAX n'aidera pas ici: tout traitement des cookies à l'intérieur de l'iframe est moins fiable ("cookies tiers"), et dans IE doit passer par le filtre de politique de confidentialité - peu importe si vous définissez des cookies avec des appels AJAX, documentez Manipulation de cookies ou via des pages normales (testées).
Piskvor a quitté le bâtiment le

non, si vous effectuez un appel ajax qui définit les cookies avec HTTP (à l'intérieur de l'iframe) Ie6 contourne la politique de sécurité et définit le cookie. Veuillez vous assurer que ma solution est incorrecte avant de voter.
Luca Matteis

Voir newmoon.wz.cz/test/page.php. Vous pouvez définir des cookies via AJAX, mais vous soit a) démarrez une nouvelle session, ou b) définissez l'ID de session à partir de JS - un énorme trou de sécurité (XSRF). Mon commentaire précédent était mal, je m'excuse, mais votre solution semble plus mauvaise qu'avant: faire une faille de sécurité me semble mauvais.
Piskvor a quitté le bâtiment le

(Tout ce qui "contourne la politique de sécurité" me ressemble au moins à un bogue - s'il y a une politique, elle est là pour une raison quelconque. Dire "vis la politique de sécurité / les préférences des utilisateurs, nous le savons mieux" est une pente glissante dangereuse. ,
laisseriez-

Définir une nouvelle session? Qu'est-ce que tu racontes? La plupart des navigateurs prennent en charge cela, sans les en-têtes p3p, donc je ne comprends pas comment le faire via Ajax est différent ...
Luca Matteis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.