PHP/Einführung in Cookies

Aus Mikiwiki
< PHP
Wechseln zu: Navigation, Suche

Einführung in Cookies

Cookies sind für jeden Webentwickler eine der Basisfunktionen. Allerdings sind sie auch als Angriffspunkt der Cracker und Spionageinstrument gegen den ahnungslosen Webnutzer bekannt. Die Anwendung ist vielfältig. Einkaufsprogramme können den Warenkorb, gebührenpflichtige Seiten die Anzahl der Besuche speichern und personalisierte Seiten erkennen den Nutzer wiedern und registrieren die Zeit, wann er zuletzt da war.

Netscape gilt als Erfinder der Cookies - mit ihnen sollten die Unzulänglichkeiten von HTTP umgangen werden. Cookies sind ein grundsätzlicher Mechanismus, den serverseitige Verbindungen (wie CGI-Skripte) nutzen können, um clientseitig Informationen zu speichern und wieder auszulesen. Sendet ein Server Informationen in Form eines HTTP-Objekts an den Client zurück, so kann er zusätzlich ein Informationsstück - das Cookie - liefern, das der Client speichert. Mit diesem Cookie ist die Beschreibung einer Reihe von URLs verbunden, für die es gültig ist. Jede zukünftige Anforderung über HTTP von diesem Client an eine der gespeicherten URLs enthält das Cookie. Nicht der Server liest also Informationen aus der Cookie-Datei aus, sondern der Client (Webbrowser) sendet diese und nur diese Informationen an den URL zurück, von der sie auch geschrieben wurden. Da der Server dabei passiv reagiert, kann er diesen Prozess auch nicht manipulieren - theoretisch.

Ein Cookie wird an den Client gesendet, indem im Kopf der HTTP-Antwort ein Set-Cookie-Header eingesetzt wird. Typischerweise wird dieser durch ein CGI-Skript erzeugt. Die folgende Darstellung zeigt, wie ein solches Cookie im HTTP aussieht.

Set-Cookie: name=VALUE; expires=DATE; domain=DOMAIN_NAME; path=PATH; secure
Attribut=Wert Beschreibung
name Der Name und Inhalt des Cookies und der einzige Parameter, der nicht optional ist. Erlaubt sind alle Zeichen ausser Kommas, Strichpunkte und Leerzeichen. Es empfiehlt sich, Funktionen wie "urlencode" zu verwenden, wenn mit dem Inhalt umfangreichere Daten gespeichert werden sollen.
expires Das Verfallsdatum bestimmt, bis zu welchem Zeitpunkt das Cookie gültig ist. Wird es überschritten, so wird das Cookie gelöscht und kann nicht mehr an den Server gesendet werden. Das Datum muss folgendes Format haben.
Wdy, DD-Mon-YYYY HH:MM:SS GMT

Die Darstellung basiert auf RFC 822, RFC 850, RFC 1036 und RFC 1123. Die einzig gültige Zeitzone ist GMT. Zu beachten ist das Minuszeichen als Trennzeichen im Datum - dies entspricht nicht den in den genannten RFCs erwähnten Möglichkeiten. Der Parameter "expires" ist optional - wird er nicht angegeben, so verfällt das Cookie am Ende der Sitzung.

domain Beim Suchenin der Liste gespeicherter Cookies vergleicht der Webbrowser das Domainattribut "domain" mit dem Internetdomainnamen des Servers, von dem die URL aufgerufen wurde. Dabei werden auch Teile einer Domain berücksichtigt. Der Domainname "acme.com" wird also auch für Domains der Art "shipping.crate.acme.com" gültig sein. Nur Server, deren Domainname übereinstimmt, können Cookies setzen und lesen. Ausserdem muss der Domainname mindestens drei Punkte enthalten, ausgenommen davon sind nur die folgenden generischen Topleveldomains, bei denen zwei Punkte genügen: "com", "edu", "gov", "int", "mil", "net" und "org". Wird das Attribut nicht angegeben, so wird der Name des Servers (Hostname) verwendet.
path Das Pfad-Attribut wird verwendet, um eine Untereinheit des URL innerhalb einer Domain angeben zu können. Wenn der Domainname überprüft und eine Übereinstimmung gefunden wurde, so wird anschliessend der Pfad verglichen. Stimmt auch der Pfad überein, so wird das Cookie mit der nächsten Anforderung an den Server übertragen. Der Pfad "/foo" wird als gültig für "/foobar" und "/foo/bar.html" angesehen. Der Pfad "/" ist ein allgemeiner Platzhalter. Wird kein Pfad angegeben, so wird der Pfad der aufgerufenen Seite angenommen.
secure Mit diesem Atrribut gekennzeichnete Cookies werden nur übertragen, wenn die Übertragung über eine sichere Verbindung (HTTPS) zustandekommt. Ohne dieses Attribut werden Cookies unverschlüsselt im Klartext übertragen.

Wird ein URL von einem Server über HTTP angefordert, so prüft der Webbrowser den URL gegen alle Cookies und fügt der Anforderung bei Übereinstimmung Variablen-/Wertepaare hinzu, die in die Anforderung eingeschlossen werden. Der Server fordert also Cookies und liest sie auch nicht, sondern bekommt sie vom Webbrowser geliefert. Diese Paare haben das folgende Format.

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...

Mehrere Cookies werden in einer Anforderung übertragen. Schreiben zwei Server mit demselben Namen und Pfad Cookies, so überschreibt der letzte Prozess den vorhergehenden ohne Rückfrage oder Benachrichtigung. Wird ein anderer Name verwendet, so wird dieser als weiteres Cookie der List hinzugefügt. Wird der Pfad auf eine weitere Verzeichnistiefe erweitert, so wird ein neues Cookie erzeugt. Treffen nun bei der Abfrage mehrere Cookies zu, so werden alle zutreffenden Übereinstimmungen gesendet. Das Verfallsdatum teilt dem Client (Webbrowser) nur mit, ab wann es sicher ist, dass das Cokkie gelöscht werden kann. Es gibt aber keinen Zwang, dass die Löschung tatsächlich zu diesem Zeitpunktz erfolgt. Ebenso können Cookies vor Ablauf des Verfalldatums gelöscht werden, wenn der intern dafür bereitgestellte Speicherplatz erschöpft ist. Beim Senden der Cookies werden die weiter übereinstimmenden Pfadangaben vor den weniger übereinstimmenden übertragen.

Die maximalen Werte für Cookies, die ein Webbrowser speichert, betragen:

  • 300 Cookies insgesamt
  • 4 KB je Cookie (Name und Inhalt zusammen)
  • 20 Cookies je Server und Domain

Nach dem Überschreiten dieser Grenzen darf der Client das am längsten ungenutzte Cookie löschen. Ist das Cookie grösser als 4 KB, so wird der Inhalt gekürzt, nicht aber der Name. Will der Server ein Cookie ausdrücklich löschen, so sendet er ein schon vorhandenes Cookie (vorhandener Name) mit einem Verfallsdatum, das in der Vergangenheit liegt. Pfad und Name müssen dabei übereinstimmen.

HTTP-Proxys und andere Zwischenspeicher sollen "Set-Cookie-Header" nicht speichern. Wenn ein Set-Cookie-Header auftritt, so wird dieser auch dann weitergereicht, wenn der Server mit 304 (Not modified) oder 200 (OK) geantwortet hat. Normalerweise würden Seiten in diesem Fall nicht erneut gesendet, sondern aus dem Cache geladen werden.

Wie man beim Surfen mit Cookies verfolgt wird

In der lokalen Cookie-Datei kann mit hoher Wahrscheinlichkeit ein Cookie von "doubleclick" oder "doppelklick" gefunden werden, obwohl man sich noch nie auf der Seite "www.doubleclick.net" befunden hat. Die Firma DoubleClick liefert Marktinformationen über die Internetnutzer in Echtzeit. Dazu werden von jedem Nutzer Profile angelegt. Die Erkennung der richtigen Nutzer erfolgt per Cookie. DoubleClick-Kunden sind Händler und Anbieter im Internet, die mehr über ihre Kunden wissen möchten. Betritt ein Internetnutzer die Seite eines DoubleClick-Kunden, so wird er kurz zu DoubleClick umgeleitet, wo das Cookie gesetzt wird. Jede andere Seite mit DoubleClick verfährt genauso, nur liefert der Webbrowser die alten DoubleClick-Cookies aus - eine perfekte Verfolgung über alle Sites, die im DoubleClick-Netzwerk enthalten sind. Nebenbei liefern die DoubleClick-Kunden auch Daten über die erkannten Nutzer und füllen damit die Profile; im Gegenzug erhalten sie ständig verbesserte Profile. Das Profil selber wird bei DoubleClick gespeichert - das Cookie enthält nur die ID-Nummer. Genutzt werden diese Profilinformationen für die Steuerung der Werbung. So werden zwei verschiedene Internetnutzer, die zur gleichen Zeit dieselbe Seite besuchen, verschiedene Werbeeinblendungen sehen - je nach Profil.

Das Sammeln solcher Informationen erfolgt im allgemeinen heimlich und ohne Kenntnis und ausdrückliche Zustimmung der Nutzer. Erst beim Abschalten der Cookies bemerken viele Nutzer, mit welcher Intensität im WWW davon Gebrauch gemacht wird. Diese Art der Nutzung entspricht im übrigen auch nicht mehr der ursprünglichen Absicht. Die Zwischenschaltung des DoubleClick-Servers lässt die Cookies transparent werden - genau das sollte aber per Definition nie geschehen. Natürlich lassen sich Cookies abschalten. Das funktioniert aber bei allen Webbrowsern nur global - alles oder nichts. Es sei denn, man möchte bei jedem einzelnen Cookies um Erlaubnis gefragt werden, ob es gesetzt werden darf oder nicht.