Box 24

 Home   Infos   Tipps   Webmail   Humor   Polizei   Gästebuch   Downloads   Chat   Suchen   Feedback   Links 

 

 Anmelden/Login   Neuanmeldung/New User   Java Telnet Applet   Telnet   
 

Cookies

Cookies sind im Prinzip gar nicht so schlecht wie ihr Ruf. Ursprünglich war der Zweck von Cookies, Surfern den Besuch von Webseiten einfacher zu ermöglichen, indem zum Beispiel Anmeldevorgänge automatisiert wurden. Cookies sind eigentlich nichts anderes als eine Zeile ASCII-Text mit einigen Angaben zur Site, die in eine spezielle Datei bzw. in einen besonderen Ordner auf die Festplatte des Besuchers geschrieben und zu einem späteren Zeitpunkt von dort wieder ausgelesen wird.

Cookies erlauben eine Menge von Anwendungen, die auf andere Weise nur speziell z.B. mit CGI-Scripts zu realisieren wären. So lassen sich zum Beispiel Webseiten personalisieren, indem der Besucher den Inhalt selber zusammenstellen kann.

Es bietet sich auch an, bei einer mehrsprachigen Website oder bei Versionen mit oder ohne Java und Frames, den Besucher beim ersten Mal entscheiden zu lassen, welche Version er anschauen will. Beim nächsten Besuch wird das entsprechende Cookie ausgelesen und der Benutzer wird direkt zur passenden Seite umgeleitet.

Mit Cookies lassen sich auch Informationen zwischenspeichern und ein paar Seiten später wieder auslesen, was z.B. einfache Einkaufskörbe ermöglicht.

Kann die Festplatte formatiert werden?

Fast alles kann auch in einer schädigenden Weise verwendet werden. Da ist es auch mit den Cookies nicht anders. Bei der Schilderung eines möglichen Schadens wird allerdings oft übertrieben.

Ein normales, textbasiertes Cookie kann dem Computer mit Sicherheit nicht schaden oder ihn mit einem Virus infizieren. Eine solche Textzeile oder -datei kann normalerweise keinen selbstausführbaren Code beinhalten. Prinzipiell ist ein Cookie schliesslich nichts anderes als eine elektronische Notiz. “Normalerweise” deshalb, weil es Unix-Dateien gibt, die Eigenschaften wie “executable” haben können, damit ein integriertes Programm ablaufen kann. Solche Dateien sind für Windows-Systeme jedoch ungefährlich, da Unix-Code unter Windows nicht direkt ausführbar ist.

Theoretisch ist es aufgrund der diversen Bugs in den populären Browsern möglich, dass ein Cookie auf einer Website ein bestimmtes Programm aufruft, das auf diesem Server ausgeführt wird und Einfluss auf den Computer des Besuchers nehmen kann. Ein Cookie kann bis zu 4 KB gross sein - ein 18-Byte-Code reicht aus, um den Inhalt einer Festplatte zu löschen. Trotzdem: Diese Möglichkeiten bestehen in der Theorie. Ein Cookie mit derartigen Fähigkeiten herzustellen, ist mit viel Aufwand verbunden. Im Vergleich mit den wirklich potenziell gefährlichen Technologien wie Java oder ActiveX erscheint die theoretische Gefährlichkeitn von Cookies unbedeutend.

Big Brother?

Eigentlich geht es bei den Cookies nicht darum, ob und wie sie dem Computer schaden können, sondern eher, welche Daten sie überhaupt sammeln, auf die Festplatte schreiben und einem Server übermitteln.

Auch in diesem Zusammenhang wird meist übertrieben. Es ist den Cookies nicht möglich, Informationen aus nicht selber angelegten Informationen herauszufiltern oder gar mit anderen Daten auf der Festplatte des Benutzers zu benutzen. Zudem kann der Browser nicht einmal alle Informationen, die er in einem Cookie gespeichert hat, auch wieder daraus auslesen. Dies trifft beispielsweise auf das Ablaufdatum, den Pfad, die Domäne und die Sicherheitsinformationen zu.

Die restlichen Daten im Cookie stehen dem Browser zur Verfügung - dies aber nur, wenn die automatisch in die Datei integrierten Pfad- und Domänenangaben mit der aktuellen Seite übereinstimmen. Diese Angaben können beim Erstellen des Cookies nicht willkürlich geändert werden. Dadurch ist es nicht möglich, Informationen im Cookie heimlich in andere Domänen zu übertragen.

Ist das also nur viel Lärm um nichts? Nicht so ganz. Es ist einem Site-Betreiber mit den Cookies den Weg des Benutzers durch eine Site zu verfolgen und diese Daten weiter zu verkaufen. Aber auch hier sei gesagt, dass viele von diesen Daten mit weniger Aufwand aus dem von jedem Webserver automatisch erzeugten Logfile ausgelesen werden können.

Erstellung von Cookies verhindern

Es ist erstaunlich, dass Cookies einen solch schlechten Ruf geniessen. Mittlerweile gibt es zahlreiche Tools, welche paranoiden Kunden verkauft werden...

Dabei gibt es einfachere Möglichkeiten, eine Erstellung der Cookies zu verhindern: Erste und einfachste Möglichkeit ist es, im Browser die Cookie-Warnungen einzuschalten oder den Einsatz von Cookies ganz zu unterbinden. Im Internet Explorer 6 befinden sich die Optionen unter Extras, Internet Optionen, Datenschutz, im Navigator 4 unter Edit, Preferences, Advanced, Cookies . So bekommt man die Cookies schon recht gut in den Griff.

Zusätzlich empfiehlt es sich, die Inhalte der Cookie-Dateien und -Ordner zu löschen und die Dateien anschliessend als schreibgeschützt zu markieren. Gelöscht sollten die Dateien nicht werden, sie werden beim nächsten Cookie automatisch wieder angelegt.

Dabei muss man sich aber bewusst sein, dass danach auf Möglichkeiten von Personalisierungen der Websites verzichtet werden muss oder dass eine Website gar nicht mehr angezeigt werden kann.

Eigene Cookies erstellen

Im nachfolgenden Code sind die wichtigsten Parameter eines Cookies eingebaut, um die Arbeitsweise zu erläutern.

Besuche zählen mit Cookies

<HTML>
<HEAD>
  <TITLE>Besuche zählen mit Cookies</TITLE>
</HEAD>
<BODY>
  <SCRIPT LANGUAGE="JavaScript">
    function setCookie(visits) { 
      var expireDate = new Date();
      var today = new Date();
      expireDate.setDate(365 + expireDate.getDate());
      document.cookie = "Visits=" + visits + ";
      expires=" + expireDate.toGMTString() + ";";
      document.cookie = "LastVisit=" + escape (today.toGMTString()) + ";
      expires=" + expireDate.toGMTString() + ";";
    }
    function parseCookie() {
      var cookieList = document.cookie.split ("; ");
      var cookieArray = new Array();
      for (var i=0; i < cookieList.length; i++) {
        var name = cookieList[i].split("=");
        cookieArray[unescape(name[0])] = unescape(name[1]);
      }
      return cookieArray;
    }
    if ("" == document.cookie) {
      setCookie(1);
      document.write("<H2>Sie besuchen uns heute zum ersten Mal.</H2>");
    }
    else {
      var cookies = parseCookie();
      document.write("<H2>Schön, Sie wiederzusehen! Sie haben uns bisher" + cookies.Visits++ + "Mal besucht!</H2>");
      document.write("<H3>Ihr letzter Besuch war am " + cookies.LastVisit + ".</H3>");
      setCookie(cookies.Visits);
    }
  </SCRIPT>
</BODY>
</HTML>

Die erste Funktion setzt ein Cookie, das die Anzahl der Besuche eines bestimmten Users zählt. Zunächst definieren wir das Ablaufdatum des Kekses, indem wir das heutige Datum in die Variable expireDate lesen und um ein Jahr (365 Tage) erhöhen. Darauf wird mit der Methode document.cookie das eigentliche Cookie geschrieben. Dieses besteht aus den Teilen Visits , der die Besuche zählt, LastVisit, der das Datum des letzten Besuchs speichert, sowie den Ablaufdaten (expireDate ) für diese Teile. Die entsprechenden Werte werden aus den zuvor definierten Variablen gelesen und teilweise noch verändert. Die Daten werden nur im Format der Greenwich Mean Time akzeptiert und müssen deshalb zuerst mit der Methode toGMTString umgerechnet werden. Das Datum des letzten Besuches, das nur der Bildschirmausgabe dient, muss ausserdem codiert werden, damit Leerzeichen und ähnliches erhalten bleiben. Das geschieht mit der Methode escape.

Darauf wird eine Hilfsfunktion für die Ausgabe definiert, die ein vorhandenes Cookie in seine einzelnen, durch Strichpunkte getrennten Teile aufsplittet. Diese Bruchstücke wiederum bestehen immer aus einem Namen und einem zugehörigen Wert, die ebenfalls getrennt werden. Mit der Methode unescape werden Sonderzeichen wie beispielsweise Leerschläge, die in Cookies genutzt werden und deshalb für die Werte nicht zur Verfügung stehen, wieder entschlüsselt. Schliesslich werden die Einzelteile in einem Array gespeichert.

Der dritte Teil des Scripts kontrolliert das Lesen der Daten aus dem Cookie und dient der Ausgabe derselben auf den Bildschirm. Dazu überprüft eine Konditional-Schlaufe zunächst, ob überhaupt ein Cookie für diese Site vorhanden ist. Wenn nicht, wird der Wert von visits auf eins gesetzt und die Meldung ausgegeben, dass dies der erste Besuch sei. Wird dagegen ein Cookie gefunden, läuft die Hilfsfunktion parseCookie ab und schreibt die Resultate in die Variable cookies. Von dort werden die Werte geholt und in die Strings (document.write) für die Bildschirmausgabe eingebaut. Die Variable cookies.Visits wird vor der Ausgabe ausserdem um eins erhöht. Schliesslich wird das Cookie mit den neuen Werten wieder auf die Platte geschrieben (setCookie).

Weitere Cookiefunktionen

Unser Beispiel beinhaltet nur die wichtigsten Parameter wie Name und Wert sowie das Ablaufdatum. Letzteres ist optional und muss nicht zwingend enthalten sein. Cookies besitzen jedoch weitere optionale Parameter. Sie können auch Pfad- und Domainangaben spezifizieren und angeben, ob ein Cookie nur über sichere Verbindungen übermittelt werden soll. Wichtig ist dabei, dass die Angaben exakt in der Reihenfolge Name, Wert, Ablaufdatum, Pfad, Domäne, Sicherheit angegeben werden müssen. Falls dazwischen eine Angabe fehlen soll, müssen Sie dafür den Wert null eingeben. Ausserdem müssen Pfad und Domäne beim Setzen und beim Löschen eines Cookies exakt übereinstimmen, andernfalls wird der Keks nicht vernichtet.

Da ein Cookie sowieso immer mit der Domäne und dem zugehörigen Pfad der Seite verknüpft ist, die es angelegt hat, und standardmässig nur von diesem einen Server und der entsprechenden Seite gelesen werden kann, können diese erweiterten Angaben durchaus sinnvoll sein, um beispielsweise die gespeicherten Daten allen Seiten der gesamten Site statt nur der Einzelseite zugänglich zu machen oder in Multi-Server-Umgebungen, wie sie von vielen grösseren Angeboten im World-Wide Web (z.B. Netscape, Amazon oder CDNow) verwendet werden, das Lesen der Cookie-Informationen auch anderen Servern zu ermöglichen.