Cookie blockiert / nicht in IFRAME im Internet Explorer gespeichert


392

Ich habe zwei Websites, sagen wir, sie sind example.comund anotherexample.net. Am habe anotherexample.net/page.htmlich eine IFRAME SRC="http://example.com/someform.asp". Dieser IFRAME zeigt ein Formular an, das der Benutzer ausfüllen und senden kann http://example.com/process.asp. Wenn ich das Formular (" someform.asp") in einem eigenen Browserfenster öffne , funktioniert alles einwandfrei. Allerdings , wenn ich laden someform.aspals iFrame in IE 6 oder IE 7, die Cookies für example.com werden nicht gespeichert. In Firefox tritt dieses Problem nicht auf.

Zu Testzwecken habe ich ein ähnliches Setup unter http://newmoon.wz.cz/test/page.php erstellt .

example.comverwendet Cookie-basierte Sitzungen (und ich kann nichts dagegen tun), wird also ohne Cookies process.aspnicht ausgeführt. Wie zwinge ich den IE, diese Cookies zu speichern?

Ergebnisse des Abhörens des HTTP-Verkehrs: In der Antwort GET /someform.asp gibt es einen gültigen Set-Cookie-Header pro Sitzung (z. B. Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY), aber in der POST / process.asp-Anforderung gibt es überhaupt keinen Cookie-Header.

Edit3: Einige serverseitige AJAX + -Skripte können das Problem anscheinend umgehen, aber das sieht sehr nach einem Fehler aus und eröffnet eine ganze Reihe neuer Sicherheitslücken . Ich möchte nicht, dass meine Anwendungen eine Kombination aus Fehler und Sicherheitslücke verwenden, nur weil es einfach ist.

Bearbeiten: Die P3P-Richtlinie war die Hauptursache , vollständige Erklärung unten.


Eine gute Lösung in der Tat. Ich habe versucht, die Datenschutzrichtlinie zu erstellen. Zu meinem Kontextstamm hinzugefügt. Und auf meiner JSP-Seite setze ich den Header. Ich bin immer noch nicht in der Lage, dieses rote Auge loszuwerden. Kannst du helfen? Ich
löse

Vielen Dank für die Demo-Site @Piskvor. Ich habe hier in diesem Security.SE-Beitrag darauf
aufgelistet sind

@ makerofthings7: YW. Ich werde es auf eine nicht temporäre (sic!) Site migrieren und eine Bearbeitung auf Security.se vorschlagen. Diese Seite war ein etwas hackiger Proof-of-Concept.
Piskvor verließ das Gebäude

2
Versuchen Sie nicht, P3P unter Windows 10 / Internet Explorer 11 ( msdn.microsoft.com/en-us/library/… ) auszuführen . P3P funktioniert überhaupt nicht. Unabhängig davon, was Sie tun, werden die Cookies nicht gespeichert. Beweis auch hier verbessernie.com/test/cookie
puco

Antworten:


429

Ich habe es zum Laufen gebracht, aber die Lösung ist etwas komplex.

Was ist los

Internet Explorer verleiht IFRAME-Seiten ein geringeres Maß an Vertrauen (IE nennt dies "Inhalte von Drittanbietern"). Wenn die Seite im IFRAME keine Datenschutzrichtlinie enthält, werden ihre Cookies blockiert (was durch das Augensymbol in der Statusleiste angezeigt wird, wenn Sie darauf klicken, wird eine Liste blockierter URLs angezeigt).

das böse Auge
(Quelle: piskvor.org )

In diesem Fall wird beim Blockieren von Cookies keine Sitzungskennung gesendet, und das Zielskript gibt den Fehler "Sitzung nicht gefunden" aus.

(Ich habe versucht, die Sitzungskennung in das Formular zu setzen und sie aus POST-Variablen zu laden. Dies hätte funktioniert , aber aus politischen Gründen konnte ich das nicht tun.)

Es ist möglich, die Seite im IFRAME vertrauenswürdiger zu machen: Wenn die innere Seite einen P3P-Header mit einer Datenschutzrichtlinie sendet , die für den Internet Explorer akzeptabel ist, werden die Cookies akzeptiert .

Wie man es löst

Erstellen Sie eine p3p-Richtlinie

Ein guter Ausgangspunkt ist das W3C-Tutorial . Ich habe es durchgesehen, den IBM Datenschutzrichtlinien-Editor heruntergeladen und dort eine Darstellung der Datenschutzrichtlinie erstellt und ihr einen Namen gegeben, auf den sie verweisen kann (hier war es policy1).

HINWEIS : An diesem Punkt müssen Sie tatsächlich herausfinden, ob Ihre Website über eine Datenschutzrichtlinie verfügt, und wenn nicht, erstellen Sie diese - ob sie Benutzerdaten sammelt, welche Art von Daten, was sie damit macht, wer Zugriff darauf hat, usw. Sie müssen diese Informationen finden und darüber nachdenken . Nur ein paar Tags zusammenzuschlagen, wird es nicht schneiden. Dieser Schritt kann nicht nur in Software ausgeführt werden und ist möglicherweise sehr politisch (z. B. "Sollen wir unsere Klickstatistiken verkaufen?").

(zB "die Site wird von ACME Ltd. betrieben, sie verwendet anonyme Sitzungskennungen für ihren Betrieb, sammelt Benutzerdaten nur, wenn dies ausdrücklich gestattet ist, und nur für die folgenden Zwecke werden die Daten nur so lange wie nötig gespeichert, nur unser Unternehmen hat Zugriff darauf usw. usw. ").

(Beim Bearbeiten mit diesem Tool können Fehler / Auslassungen in der Richtlinie angezeigt werden. Sehr nützlich ist auch die Registerkarte "HTML-Richtlinie": Unten befindet sich eine "Richtlinienbewertung" - eine schnelle Überprüfung, ob die Richtlinie blockiert wird nach den Standardeinstellungen des IE)

Der Editor exportiert in eine .p3p-Datei, die eine XML-Darstellung der obigen Richtlinie ist. Es kann auch eine "kompakte Version" dieser Richtlinie exportieren.

Link zur Richtlinie

Dann wurde eine Richtlinienreferenzdatei ( http://example.com/w3c/p3p.xml) benötigt (ein Index der von der Site verwendeten Datenschutzrichtlinien):

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

Das <INCLUDE>zeigt alle URIs an, die diese Richtlinie verwenden (in meinem Fall die gesamte Site). Die Richtliniendatei, die ich aus dem Editor exportiert habe, wurde in hochgeladenhttp://example.com/w3c/example-com.p3p

Senden Sie den kompakten Header mit Antworten

Ich habe den Webserver auf example.com so eingestellt, dass er den kompakten Header mit folgenden Antworten sendet:

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

policyrefist eine relative URI zur Richtlinienreferenzdatei (die wiederum auf die Datenschutzrichtlinien verweist), CPist die kompakte Richtliniendarstellung. Beachten Sie, dass die Kombination der P3P-Header im Beispiel möglicherweise nicht auf Ihrer spezifischen Website anwendbar ist. Ihre P3P-Header MÜSSEN Ihre eigenen Datenschutzbestimmungen wahrheitsgemäß wiedergeben!

Profitieren!

In dieser Konfiguration wird der böse Blick nicht angezeigt, die Cookies werden sogar im IFRAME gespeichert und die Anwendung funktioniert.

Bearbeiten: Was NICHT zu tun ist, es sei denn, Sie verteidigen gerne gegen Klagen

Einige Leute haben vorgeschlagen, "nur ein paar Tags in Ihren P3P-Header zu stecken, bis der böse Blick aufgibt".

Die Tags sind nicht nur ein Haufen Bits, sie haben auch reale Bedeutungen und ihre Verwendung gibt Ihnen reale Verantwortlichkeiten !

Wenn Sie beispielsweise so tun, als würden Sie niemals Benutzerdaten erfassen, wird der Browser möglicherweise glücklich. Wenn Sie jedoch tatsächlich Benutzerdaten erfassen, widerspricht der P3P der Realität. Schlicht und einfach, Sie belügen Ihre Benutzer absichtlich , und das kann in einigen Ländern kriminelles Verhalten sein. Wie in "Geh ins Gefängnis, sammle keine 200 Dollar".

Einige Beispiele ( siehe p3pwriter für den vollständigen Satz von Tags ):

  • NOI : "Die Website sammelt keine identifizierten Daten." (Sobald es Anpassungen, ein Login oder eine Datenerfassung gibt (***** Analytics, irgendjemand?), müssen Sie dies in Ihrem P3P bestätigen.)
  • STP : Informationen werden aufbewahrt, um den angegebenen Zweck zu erfüllen. Dies erfordert, dass Informationen zum frühestmöglichen Zeitpunkt verworfen werden. Websites MÜSSEN über eine Aufbewahrungsrichtlinie verfügen, die einen Zeitplan für die Zerstörung erstellt. Die Aufbewahrungsrichtlinie MUSS in die für Menschen lesbare Datenschutzrichtlinie der Website aufgenommen oder von dieser verlinkt sein. "(Wenn Sie STPalso eine Aufbewahrungsrichtlinie senden, aber keine haben , begehen Sie möglicherweise Betrug. Wie cool ist das? Überhaupt nicht.)

Ich bin kein Anwalt, aber ich bin nicht bereit, vor Gericht zu gehen, um zu prüfen, ob der P3P-Header wirklich rechtsverbindlich ist oder ob Sie Ihren Benutzern etwas versprechen können, ohne tatsächlich bereit zu sein, Ihre Versprechen einzuhalten.


Ich war zu 95% vollständig, aber mein Header sagte nur: P3P: CP = "...." und enthielt nicht den Richtlinienreferenz-Link, wodurch es in IE7 funktionierte, aber nicht in IE6 ... funktioniert jetzt gut. Vielen Dank!
AndreasKnudsen

4
Der Link zum IBM Editor funktioniert nicht mehr. Durch die Wayback-Maschine konnte ich diesen funktionierenden Link finden: www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/p3peditor/Xa.2/…
ripper234

34
Einige Neuigkeiten zu diesem Thema: -IBM-Editor finden Sie unter: softpedia.com/get/Security/Security-Related/… -P3P-Standards scheinen "tot" zu sein. Große Unternehmen wie Google und Facebook verwenden jetzt ungültige P3P-Header, um die IE-Sicherheit zu umgehen. Siehe diese Beiträge: cylab.cmu.edu/research/techreports/2010/tr_cylab10014.html zdnet.com/blog/facebook/… techpolicy.com/…
Davide Icardi

7
Eine weitere Information, die jemandem mit einem ähnlichen Problem helfen kann: Aus meinen Tests geht hervor, dass sich Domains in verschiedenen Sicherheitszonen befinden (z. B. Erstanbieter ist Internet und Drittanbieter ist Intranet). Cookies von Drittanbietern können auch dann nicht akzeptiert werden, wenn P3P korrekt ist konfiguriert. Der Cookie ist immer gesperrt.
Davide Icardi

1
Es ist wichtig anzumerken, dass der Begriff „Dritte“ nicht so klar ist, wie man denkt. Wenn ein Iframe Inhalte von Drittanbietern in Bezug auf die einschließende Site enthält und über eine gültige Datenschutzrichtlinie verfügt und zu einer Ansicht im Iframe umleitet, die von der Hauptwebsite stammt, wird der IE dies nicht tun, es sei denn, diese Ansicht verfügt über eine gültige Datenschutzrichtlinie Vertraue seinen Cookies. Auch wenn diese Ansicht von derselben Site stammt wie die, die den Iframe enthält.
Tarife

168

Ich habe einen großen Teil meines Tages damit verbracht, mich mit dieser P3P-Sache zu beschäftigen, und ich habe das Bedürfnis, zu teilen, was ich herausgefunden habe.

Ich habe festgestellt, dass das P3P-Konzept sehr veraltet ist und nur von Internet Explorer (IE) wirklich verwendet / durchgesetzt zu werden scheint.

Die einfachste Erklärung lautet: IE möchte, dass Sie einen P3P-Header definieren, wenn Sie Cookies verwenden.

Dies ist eine gute Idee, und zum Glück verursacht das Nicht-Bereitstellen dieses Headers die meiste Zeit keine Probleme (siehe Browser-Warnungen). Es sei denn, Ihre Website / Webanwendung wird mithilfe eines (i) Frames auf eine andere Website geladen. Dies ist, wo IE ein massiver Schmerz in der *** wird. Sie können kein Cookie setzen, es sei denn, der P3P-Header ist gesetzt.

Da ich das wusste, wollte ich eine Antwort auf die folgenden zwei Fragen finden:

  1. Wen interessiert das? Mit anderen Worten, kann ich verklagt werden, wenn ich das Wort "Kartoffel" in die Kopfzeile setze?
  2. Was machen andere Unternehmen?

Meine Ergebnisse sind:

  1. Keinen interessiert es. Ich kann kein einziges Dokument finden, das darauf hinweist, dass diese Technologie rechtliches Gewicht hat. Während meiner Recherche habe ich kein einziges Land auf der ganzen Welt gefunden, das ein Gesetz verabschiedet hat, das Sie daran hindert, das Wort "Kartoffel" in den P3P-Header aufzunehmen
  2. Sowohl Google als auch Facebook fügen in ihr P3P-Headerfeld einen Link ein, der auf eine Seite verweist, auf der beschrieben wird, warum sie keinen P3P-Header haben.

Das Konzept wurde 2002 geboren und es verwirrt mich, dass dieses veraltete und rechtlich nicht umgesetzte Konzept Entwicklern im IE immer noch aufgezwungen wird. Wenn dieser Header keine rechtlichen Auswirkungen hat, sollte dieser Header ignoriert werden (oder alternativ eine Warnung oder Benachrichtigung in der Konsole generieren). Nicht durchgesetzt! Ich bin jetzt gezwungen, eine Zeile in meinen Code einzufügen (und einen Header an den Client zu senden), die absolut nichts bewirkt.

Kurz gesagt - um den IE bei Laune zu halten - fügen Sie Ihrem PHP-Code die folgende Zeile hinzu (andere Sprachen sollten ähnlich aussehen)

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

Problem gelöst, und IE ist mit dieser Kartoffel zufrieden.


6
In der Tat hat sich das Problem seit 2008, als dies veröffentlicht wurde, erheblich geändert. Das Web ist weitergegangen, und der Konsens über P3P hat sich auf "niemand kümmert sich mehr" geeinigt. Gut zu wissen, was der IE in diesem Fall mit ungültigen Eingaben macht.
Piskvor verließ das Gebäude

19
Oh man, dies ist eines dieser versteckten Juwelen des Internet Explorers! HttpContext.Current.Response.AddHeader ("p3p", "CP =" Internet Explorer wurde von Idioten programmiert "); Das funktioniert bei mir!
Michiel Cornille

6
@Mvision Beschuldigen Sie nicht die Entwickler, dies ist eher ein Problem im Zusammenhang mit Anwälten und Management? Ich vermute, dass die meisten Entwickler
erkannt

5
Für ASP.Net können Sie dies zu Ihrer Webkonfiguration hinzufügen: '<system.webServer> <handlers> <httpProtocol> <customHeaders> <add name = "p3p" value = "CP = & quot; Internet Explorer erfordert dies, um Cookies von Drittanbietern setzen & quot; " /> </ customHeaders> </ htpProtocol> </ handlers> </system.webServer> '
Rick Kierner

1
Oh das muss höher sein! Ich habe stundenlang versucht, Cookies in einem IE 11-Iframe zum Laufen zu bringen. Probieren Sie alle Arten von P3P-Kombinationen aus und erzielen Sie je nach Cookie-Typ / Ablauf verschiedene Ergebnisse. Endlich hat Potatomein P3P das Problem gelöst. Haha!
dtbaker

55

Ich konnte den bösen Blick verschwinden lassen, indem ich einfach diesen kleinen Header zur Site im IFrame (PHP-Lösung) hinzufügte:

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

Denken Sie daran, Strg + F5 zu drücken , um Ihre Site neu zu laden. Andernfalls zeigt der Explorer möglicherweise immer noch den bösen Blick, obwohl er einwandfrei funktioniert. Dies ist wahrscheinlich der Hauptgrund, warum ich so viele Probleme hatte, es zum Laufen zu bringen.

Es war überhaupt keine Richtliniendatei erforderlich.

Bearbeiten: Ich habe einen schönen Blogeintrag gefunden, der das Problem mit Cookies in IFrames erklärt. Es gibt auch eine schnelle Lösung im C # -Code: Frames, ASPX-Seiten und abgelehnte Cookies


10
IANAL, aber die P3P-Richtlinie scheint rechtlich bindend zu sein. Wissen Sie, was Sie den Benutzern hier versprechen, oder haben Sie nur Tags gemischt, bis das EvilEye verschwunden ist? Ich denke, dass das Zwischenspeichern von Browsern nicht Ihr größtes Problem sein wird: " NOI : Die Website sammelt keine identifizierten Daten. STP : Informationen werden gespeichert , um den angegebenen Zweck zu erfüllen. Dies erfordert, dass Informationen zum frühestmöglichen Zeitpunkt verworfen werden. Websites MÜSSEN über eine Aufbewahrungsrichtlinie verfügen, die einen Zeitplan für die Zerstörung erstellt. Die Aufbewahrungsrichtlinie MUSS in die für Menschen lesbare Datenschutzrichtlinie der Website aufgenommen oder mit dieser verknüpft sein. "
Piskvor verließ das Gebäude

28
Ich muss zugeben, dass es mir egal ist, was es bedeutet, ich brauchte nur Dinge, um im Explorer zu arbeiten. Die Sites sind unsere eigenen nicht öffentlichen Sites, von denen eine ein Cookie verwendet, um sich zu "merken", in welchem ​​Stil die Site angezeigt werden soll. Also, ja, ich habe nur Tags gemischt, bis der böse Blick verschwunden ist.
Helo

Fand einen schönen Blogeintrag, der das Problem hier erklärt: aspnetresources.com/blog/frames_webforms_and_rejected_cookies
Helo

6
Die zunehmende Irrelevanz von P3P. cylab.cmu.edu/files/pdfs/tech_reports/CMUCyLab10014.pdf Wenn es so rechtsverbindlich ist, würde es jetzt Vorrang vor solchen Rechtsstreitigkeiten geben. Es wird mit so hohem Ansehen gesehen, dass alle bis auf einen meiner Konkurrenten sich überhaupt die Mühe machen, einen zu veröffentlichen. Sie müssen herausfinden, dass sich die Mühe nicht lohnt, wenn ihre Kunden die IE-Einstellung nicht auf Mittel setzen können. Der Umsatzverlust auf einer Website müsste ziemlich hoch sein, wenn Cookies nicht funktionieren. Der Warenkorb stirbt ohne sie.
Fiasco Labs

3
Diese Antwort schlägt vor, einen Dummy-Header wie zu verwenden CP="This_is_not_a_privacy_policy". Das zu tun scheint weniger rechtlich bindend, denke ich (da zB NOI und STP und so etwas überhaupt nicht erwähnt wird) und macht IE anscheinend glücklich :-)
KajMagnus

21

Dies ist in den Kommentaren anderer Antworten vergraben, aber ich habe es fast verpasst, so dass es scheint, als hätte es eine eigene Antwort verdient.

Zur Überprüfung: Damit der IE Cookies von Drittanbietern akzeptieren kann, müssen Sie Ihre Dateien mit einem http-Header namens p3p im folgenden Format bereitstellen:

CP="my compact p3p policy"

ABER p3p ist zu diesem Zeitpunkt als Standard so gut wie tot, und Sie können den Internet Explorer problemlos zum Laufen bringen, ohne Zeit und rechtliche Ressourcen in die Erstellung einer echten p3p-Richtlinie zu investieren. Dies liegt daran, dass wenn Ihr kompakter p3p-Richtlinienheader ungültig ist, der IE ihn tatsächlich als gute Richtlinie behandelt und Cookies von Drittanbietern akzeptiert. Sie können also einen solchen p3p-Header verwenden

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

Sie können optional einen Link zu einer Seite einfügen, auf der erläutert wird, warum Sie keine p3p-Richtlinie haben, wie dies bei Google und Facebook der Fall ist (sie verweisen hier: https://support.google.com/accounts/answer/151657 und hier: https : //www.facebook.com/help/327993273962160/ ).

Schließlich ist es wichtig zu beachten, dass alle Dateien, die von der Site eines Drittanbieters bereitgestellt werden, den p3p-Header haben müssen, nicht nur den, der das Cookie setzt, sodass Sie dies möglicherweise nicht einfach in Ihrem PHP, asp.net usw. Tun können Code. Sie sind wahrscheinlich besser dran, sich auf Webserverebene einzurichten (dh in IIS oder Apache).


20

Ich hatte auch dieses Problem und dachte, ich würde den Code veröffentlichen, den ich in meinem MVC2-Projekt verwendet habe. Seien Sie vorsichtig, wenn Sie im Seitenlebenszyklus, den Sie in den Header einfügen, eine HttpException erhalten. " Server kann Header nicht anhängen, nachdem HTTP-Header gesendet wurden ." Ich habe ein benutzerdefiniertes ActionFilterAttribute für die OnActionExecuting-Methode verwendet (aufgerufen, bevor die Aktion ausgeführt wird).

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

Anwendungsbeispiel:

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

        return View();
    }

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

14

Dies ist ein großartiges Thema zu diesem Thema, aber ich fand, dass ein wichtiges Detail (das zumindest in meinem Fall wesentlich war), das weder hier noch anderswo veröffentlicht wurde (ich entschuldige mich, wenn ich es gerade verpasst habe), dass die P3P-Leitung sein muss Wird im Header JEDER vom Server eines Drittanbieters gesendeten Datei übergeben, auch von Dateien, die keine Cookies setzen oder verwenden, wie z. B. Javascript-Dateien oder Bilder. Andernfalls werden die Cookies blockiert. Ich habe mehr dazu in einem Beitrag hier: http://posheika.net/?p=110


5

Jeder, der dieses Problem in node.js hat.

Fügen Sie dann dieses p3p-Modul hinzu und aktivieren Sie dieses Modul in der Middleware.

npm install p3p

Ich benutze Express, also füge ich es in app.js hinzu

Benötigen Sie zuerst dieses Modul in app.js.

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

Verwenden Sie es dann als Middleware

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

Es werden p3p-Header am res-Objekt hinzugefügt. Keine Notwendigkeit, zusätzliche Dinge zu tun.

Weitere Informationen erhalten Sie unter:

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


5

Wenn jemand nach einer Apache-Leitung sucht; wir haben diesen benutzt.

Header gesetzt P3P "CP =" Danke IE8 "

Es war wirklich egal, auf welchen CP-Wert wir eingestellt waren, solange es den P3P-Header gibt.


4

Eine Möglichkeit besteht darin, die Domain zu zulässigen Websites in Tools -> Internetoptionen -> Datenschutz -> Websites hinzuzufügen: somedomain.com -> Zulassen -> OK.


23
Ja, wenn Sie sich nur darum kümmern, dass es auf Ihrem Computer funktioniert. Es ist nicht ganz praktisch, dies jedem Besucher zu empfehlen.
Piskvor verließ das Gebäude am

3

Dieser Beitrag enthält einige Kommentare zu P3P und eine Abkürzungslösung, die die Probleme mit IE7 und IE8 reduziert.


1
Um den Artikel zu zitieren: "Im Grunde heißt es" Wir sammeln keine Ihrer persönlichen Daten "" - viel Glück damit. Ich habe keine Websites gesehen, die tatsächlich die in dieser Richtlinie festgelegten Token erfüllen (überhaupt keine Daten erfassen , nicht einmal anonyme statistische Daten - Serverzugriffsprotokolle, irgendjemand?). Die andere angebotene Richtlinie ist ebenfalls ziemlich schwer zu erreichen (Sie haben irgendeine Art von Webanalyse? Bam, Sie haben gerade Ihre P3P-Richtlinie gebrochen). Der Artikel kann also zusammengefasst werden als "Lüge einfach krass, niemand kümmert sich sowieso darum". Der nützlichste Artikel im gesamten Internet .
Piskvor verließ das Gebäude am

Um einen anderen Teil des Artikels zu zitieren: "Es gibt überraschend wenig gute, kostenlose Informationen im Internet über P3P, kompakte Richtlinien und die Anforderungen von IE7 - und IE7 liefert absolut keine hilfreiche Debugging-Ausgabe, z. B. warum Ihr Cookie blockiert wurde." Dies scheint völlig richtig zu sein! Nachdem ich den größten Teil meines Tages damit verbracht hatte herauszufinden, warum sich IE7 / 8 anders verhält als jeder andere Browser, war ich äußerst glücklich, diesen Beitrag zu finden. Es ist wahrscheinlich Zeit zu erkennen, dass P3P eine tote Spezifikation ist und dass die meisten Leute lieber nur daran arbeiten würden. Dieser Beitrag ist wahrscheinlich der nützlichste zu diesem Thema.
Henrik Aasted Sørensen

"Es gibt überraschend wenig gute, kostenlose Informationen im Internet" - das hätte 2007 (als das geschrieben wurde) zutreffen können, aber es gibt jetzt viele Informationen im Internet, sogar kostenlose Tools, mit denen Sie die P3P-Richtlinie entsprechend erstellen können Ich verteidige P3P nicht, aber zu sagen, "eh scheiß drauf, lass es einfach verschwinden" kann teure Konsequenzen haben (da du sehr eindeutige Behauptungen über deine Website aufstellst). Ob P3P tatsächlich rechtlich bindend ist, hat es nicht. " Ich bin noch nicht getestet worden (IIRC), aber ich möchte nicht am Ende dieser Klage stehen.
Piskvor verließ das Gebäude am

1
@Piskvor - Bitte poste die kostenlosen P3P-Tools. Alle, die ich versuche zu gehen, wurden von Linkfarmen und gefälschter Suche aufgekauft. IBM zog ihr kostenloses Tool. P3P-Unterstützung scheint wie Gras zu sein, das 2012 bei einer Dürre stirbt.
Fiasco Labs

2
Den IBM Alphaworks p3p-Editor finden Sie hier auf softpedia: softpedia.com/get/Security/Security-Related/…
Fiasco Labs

3

Eine Lösung, die ich hier nicht erwähnt habe, ist die Verwendung von Sitzungsspeicher anstelle von Cookies. Natürlich entspricht dies möglicherweise nicht allen Anforderungen, aber in einigen Fällen ist es eine einfache Lösung.


1
Guter Punkt. Beachten Sie, dass zum Zeitpunkt der Veröffentlichung dieser Frage keine Unterstützung für den Sitzungsspeicher vorhanden war, insbesondere im IE. Aber die Zeiten ändern sich;)
Piskvor verließ das Gebäude am

3

Ich habe dieses Problem im Hinblick auf die Abmeldung über Azure Access Control Services untersucht und konnte keine Verbindung zwischen Kopf und Schwanz herstellen.

Dann stolperte über diesen Beitrag https://blogs.msdn.microsoft.com/ieinternals/2011/03/10/beware-cookie-sharing-in-cross-zone-scenarios/

Kurz gesagt, der IE teilt Cookies nicht über Zonen hinweg (z. B. Internet oder vertrauenswürdige Websites).

Wenn sich Ihr IFrame-Ziel und Ihre HTML-Seite in P3P einer anderen Zone befinden, hilft dies bei nichts.


Ich bin überrascht, dass dies auch 2016 noch relevant ist :)
Piskvor verließ das Gebäude am

1
Der Status für P3P im IE ist hier dokumentiert: msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx , die Zukunft sieht rosig aus :)
Frode Nilsen


2

Ich habe bereits eine vollständige P3P-Richtlinie implementiert, wollte mich aber bei einem neuen Projekt, an dem ich arbeitete, nicht noch einmal anstrengen. Ich fand diesen Link nützlich für eine einfache Lösung des Problems, da ich nur eine minimale kompakte P3P-Richtlinie von "CAO PSA OUR" angeben musste:

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

Der Artikel zitiert einen (jetzt defekten) Link zu einem Microsoft KB-Artikel. Die Politik hat den Trick für mich getan!


1

Sie können auch die Dateien p3p.xml und policy.xml als solche kombinieren:

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

Ich fand, dass der einfachste Weg, einen Header hinzuzufügen, ein Proxy über Apache ist und mod_headers als solchen verwendet:

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

Daher stellen wir alle Anforderungen außer denen an /w3c/p3p.xml an unseren Anwendungsserver.

Sie können alles mit dem W3C-Validator testen


Sendet dies den Header mit 304 Anfragen? Einige Versionen von IE löschen tatsächlich Cookies, wenn Sie einen P3P-Header mit einem 304 senden.
Joshua

Entschuldigung, ich weiß es nicht, da ich nicht mehr an diesem Code arbeite. Wenn es ein Problem ist, können Sie wahrscheinlich den Statuscode in Apache auf 200 erzwingen.
Kris


1

Ich weiß, dass es etwas spät ist, meinen Beitrag zu diesem Thema zu leisten, aber ich habe so viele Stunden verloren, dass diese Antwort vielleicht jemandem hilft.

Ich habe versucht, ein Cookie eines Drittanbieters auf meiner Website aufzurufen, und natürlich funktionierte es in Internet Explorer 10 nicht, selbst bei niedriger Sicherheitsstufe. Fragen Sie mich nicht, warum. Im iframe habe ich eine read_cookie.php (echo $ _COOKIE) mit Ajax aufgerufen.

Und ich weiß nicht, warum ich die P3P-Richtlinie zur Lösung des Problems nicht festlegen konnte ...

Während meiner Suche habe ich etwas darüber gesehen, wie der Cookie in JSON funktioniert. Ich versuche es nicht einmal, weil ich dachte, wenn der Cookie keinen Iframe durchläuft, durchläuft er kein Array mehr ...

Ratet mal, was es tut! Wenn Sie also Ihren Cookie mit json_encode codieren und nach Ihrer Ajax-Anfrage dekodieren, erhalten Sie ihn!

Vielleicht habe ich etwas verpasst und wenn ich es getan habe, alle meine Entschuldigungen, aber ich habe noch nie etwas so Dummes gesehen. Blockieren Sie Cookies von Drittanbietern aus Sicherheitsgründen. Lassen Sie sie jedoch passieren, wenn sie verschlüsselt sind. Wo ist die Sicherheit jetzt?

Ich hoffe, dieser Beitrag hilft jemandem und wieder, wenn ich etwas verpasst habe und dumm bin, erziehe mich bitte!


Interessant ... also entschlüsseln Sie den Cookie in JS?
Piskvor verließ das Gebäude

Nein, ich schreibe nur das Cookie in ein JSON-Array mit der PHP-Funktion json_encode () und komme dann über einen Ajax-JSON-Aufruf zurück.
Pierreaurelemartin

1

Dies funktionierte schließlich für mich (nach viel Eile und Generieren einiger Richtlinien mit dem IBM-Richtliniengenerator). Sie können den Richtliniengenerator hier herunterladen: http://www.softpedia.com/get/Security/Security-Related/P3P-Policy-Editor.shtml

Ich konnte den Generator nicht mehr von der offiziellen IBM Website herunterladen.

Ich habe diese Dateien im Stammordner meiner Web-App erstellt

/index.php
/w3c/policy.html (Human readable format)
/w3c/p3p.xml
/w3c/policy.p3p
  1. Index.php: Senden Sie einfach einen zusätzlichen Header:
header('P3P: policyref="/w3c/p3p.xml", CP="ALL DSP NID CURa ADMa DEVa HISa OTPa OUR NOR NAV DEM"');
  1. Inhalt von p3p.xml
<META>
    <POLICY-REFERENCES>
        <POLICY-REF about="/w3c/policy.p3p#App">
            <INCLUDE>/</INCLUDE>
            <COOKIE-INCLUDE/>
        </POLICY-REF>
    </POLICY-REFERENCES>
</META>
  1. Inhalt meiner Datei 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. Inhalt von 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>

Es geht zum übergeordneten Fenster Serververzeichnis oder einem Iframe-Serververzeichnis?
JackTheKnife


0

Für alle, die versuchen, die P3P Compact-Richtlinie mit statischen Inhalten zum Laufen zu bringen:

Dies ist nur möglich, wenn Sie benutzerdefinierte serverseitige Antwortheader mit statischem Inhalt senden können.

Eine ausführlichere Erklärung finden Sie in meiner Antwort hier: Legen Sie den P3P-Code in HTML fest



-1

Eine bessere Lösung wäre, einen Ajax-Aufruf innerhalb des Iframes zu der Seite zu tätigen, auf der Cookies abgerufen / gesetzt werden ...


1
AJAX wird hier nicht helfen: jede Cookie innerhalb des iframe Handhabung weniger vertrauenswürdig ist ( „Cookies von Drittanbietern“), und im Internet Explorer muss durch den Datenschutz Filter passieren - egal , wenn Sie Einstellung Cookies mit AJAX Anrufe, Dokument .cookie Manipulation oder durch normale Seiten (getestet).
Piskvor verließ das Gebäude am

Nein, wenn Sie einen Ajax-Aufruf tätigen, der die Cookies mit HTTP (innerhalb des Iframes) setzt, umgeht Ie6 die Sicherheitsrichtlinie und setzt das Cookie. Bitte stellen Sie sicher, dass meine Lösung falsch ist, bevor Sie abstimmen.
Luca Matteis

Siehe newmoon.wz.cz/test/page.php. Sie können Cookies über AJAX setzen, aber Sie a) entweder eine neue Sitzung starten oder b) die Sitzungs-ID von JS festlegen - eine große Sicherheitslücke (XSRF). Mein vorheriger Kommentar war falsch, ich apologize.But, wronger Ihre Lösung aussieht als vorher: Herstellung einer Sicherheitslücke mir schlecht zu sein scheint.
Piskvor verließ das Gebäude am

(Alles, was "Sicherheitsrichtlinien umgeht", sieht für mich zumindest wie ein Fehler aus - wenn es eine Richtlinie gibt, gibt es sie aus irgendeinem Grund. Die Aussage "Schrauben Sie die Sicherheitsrichtlinien / Benutzereinstellungen, wir wissen es besser" ist ein gefährlicher, rutschiger Hang , würden Sie die Funktionalität von (noch) nicht behobenen bekannten Fehlern abhängen lassen?)
Piskvor verließ das Gebäude am

Neue Sitzung einrichten? Worüber redest du? Die meisten Browser unterstützen dies ohne den p3p-Header, daher verstehe ich nicht, wie es anders ist, wenn man es über Ajax macht ...
Luca Matteis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.