Wie implementiert man die P3P-Header zur Verwendung von Cross-Site-Cookies

Warum sollte ich sicherstellen, dass P3P für die Verwendung von Cross-Site-Cookies implementiert ist?
Die Antwort kurz und knapp: Weil sonst das Session-Management nicht funktionieren könnte.

Wieso ist das so?
Wenn Sie auf Ihrer Seite Elemente von Drittanbietern einbinden (Iframe, JavaScript, Werbemittel), dann kann es unter bestimmten Browserkonfigurationen dazu kommen, dass die externen Elemente keine Cookies setzen dürfen. Ohne Cookies ist auch kein Fenster-/Tabübergreifendes Sessionmanagement möglich. Die Betroffenen Browser sind Internet Explorer 6, 7 und 8 in der Standardkonfiguration (Privatsphäreneinstellung auf „Mittel“).
Weitere Informationen zu Internet Explorer und P3P findet man bei microsoft.com: Privacy in Internet Explorer 6.

Ich habe mich schon über P3P informiert, aber die Implementierung aufgrund der hohen Komplexität verworfen.
Im Internet finden sich einige P3P-Generatoren, die komplexe XML-Dateien erzeugen, mit dieser der Webserver in der Lage ist, die richtigen Header für die jeweilige Seite mitzusenden. Diese Tools schießen zum großen Teil über das Ziel hinaus und eignen sich nur für sehr komplexe Webseiten.

Geht es auch einfacher?
Ja. Damit die Cookies auch funktionieren, muss nur der Header des Third-Party-Content modifiziert werden. Wie das geht, zeigen die Beispiele weiter unten. Hinweis: Die Aufrufende Seite hat keinen Einfluss auf das Cookieverhalten, das kann nur über das aufgerufene Objekt ausgesteuert werden (Beziehungen der Seiten/Objekte beachten!).

Beispiele für Skriptsprachen:

Unter PHP:


In ASP.NET kann es so aussehen. (Ich kenne mich mit ASP.NET nicht aus, dieser Code soll allerdings funktionieren):

protected void Application_BeginRequest(Object sender, EventArgs e)
{
// Example from planet.admon.org
HttpContext.Current.Response.AddHeader("p3p", "CP="CAO PSA OUR"");
}

Beispiele für die Konfiguration im Webserver

Unter Lighthttpd wir die folgende direktive in der lighttpd.conf benutzt:

server.modules    = ("mod_setenv")
setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")

Unter Apache wird diese Einstellung zum Erfolg führen:


Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'

Weitere Details über HTTP/1.1 P3P Header finden Sie auf http://www.w3.org/P3P/. Fragen in den Kommentaren beantworte ich gerne

8 Gedanken zu „Wie implementiert man die P3P-Header zur Verwendung von Cross-Site-Cookies“

  1. Hallo!
    Der Beitrag hat mir geholfen 🙂 habe mich auch mit den P3P-Generatoren befasst, das ist vielleicht ein Krampf! Schöne und einfache Lösung über den Header. Danke!

  2. Danke für den Post. Funktioniert für den IE prima. Nun habe ich aber das Problem, dass es unter Safari auf Mac nicht zu funktionieren scheint. Jemand ne Idee, woran das liegen kann?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.