Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Eine Einführung in Cookies

by
Difficulty:BeginnerLength:LongLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

Sie haben vielleicht schon von Cookies gehört, aber was genau sind sie und was können wir tatsächlich damit machen? In diesem Tutorial konzentrieren wir uns auf die Grundlagen von Cookies und lernen deren Funktionalität in verschiedenen Webanwendungs- und Websiteumgebungen kennen. Wir werden auch lernen, wie man sie in unseren PHP- und JavaScript-Projekten verwendet, wobei wir besonders auf Sicherheitsprobleme achten, die bei ihrer Verwendung auftreten können. Nachdem Sie dies gelesen haben, haben Sie die erforderlichen Fähigkeiten erworben, um Cookies sicher in Ihre eigenen Webanwendungen zu implementieren.


Schritt 1. Cookies verstehen

Der erste Schritt auf unserer Reise besteht darin, herauszufinden, was diese Cookies tatsächlich sind! Selbst wenn Sie bereits mit ihnen gearbeitet haben, finden Sie diesen Teil möglicherweise sehr nützlich - bleiben Sie also bei mir!

Abstrakt

Sie können sich Cookies am einfachsten als Textdateien vorstellen, die auf Ihrem Computer gespeichert werden. Auf Wunsch eines Webservers erstellt Ihr Browser eine solche Datei. Danach kann der Webserver Inhalte aus und in diese Datei lesen und schreiben. Obwohl dies eine gefährliche Funktion zu sein scheint - schließlich mag niemand andere Leute, die Dateien auf ihren Computer schreiben, gibt es einige Einschränkungen, um diesen Prozess so sicher wie möglich zu gestalten.

  • Webserver können nur auf Cookies zugreifen, die auf ihre eigene Domain gesetzt sind. Diese Domain wird vom Browser festgelegt, wenn ein neues Cookie vom Webserver angefordert wird. Sie kann nur die Domain oder eine Subdomain des Webservers sein (der Webserver kann eine Subdomain auswählen, wenn er möchte). Dies bedeutet, dass Cookies, die beispielsweise von google.com gesetzt wurden, von mozilla.com nicht gelesen werden können und umgekehrt.
  • Gemäß dem HTTP-Protokoll dürfen Cookies nicht größer als 4096 Bytes (4 KB) sein.
  • Die Anzahl der Cookies pro Domain ist begrenzt. Die Anzahl ist je nach Browser unterschiedlich, das allgemein verwendete Limit beträgt jedoch zwanzig Cookies. Dies soll verhindern, dass eine einzelne Domäne den Speicherplatz des Clients belegt.
  • Die Gesamtzahl der Cookies auf der Festplatte des Clients ist begrenzt. Diese Anzahl unterscheidet sich auch je nach Browser, ist jedoch normalerweise auf etwa dreihundert Cookies beschränkt. Wenn diese Anzahl überschritten wird, wird ein älteres Cookie gelöscht, bevor ein neues erstellt wird.

Cookies haben ein Ablaufdatum. Dieses Datum ist so festgelegt, dass der Browser alte Cookies löschen kann, wenn sie vom Webserver nicht mehr benötigt werden. Wenn das Ablaufdatum leer ist, wird das Cookie gelöscht, wenn die Verbindung zum Server geschlossen wird. Dies tritt auf, wenn das Fenster oder die Registerkarte der Site vom Benutzer geschlossen wird oder wenn der Benutzer den gesamten Browser schließt. Diese Cookies, manchmal auch Sitzungscookies genannt, werden hauptsächlich zum Speichern temporärer Einstellungen verwendet.

Technisch

Lassen Sie uns herausfinden, wie diese Dinge auf technischer Ebene aussehen. Cookies werden über das HTTP-Protokoll übertragen. Dies ist das Protokoll, mit dem Browser Dateien abrufen und an den Server senden. Nachdem ein Cookie angefordert wurde, wird es jedes Mal an den Server gesendet, wenn ein neues Element auf der Webseite vom Browser abgerufen wird. Unten sehen wir ein Snippet eines Servers, der ein neues Cookie anfordert (dieses Snippet ist Teil einer HTTP-Antwort).

Jetzt keine Angst, es ist alles sehr verständlich!

  • Set-Cookie: soll den Browser darüber informieren, dass der Server ein neues Cookie erstellen möchte.
  • Name ist der Name des Cookies. Jedes Cookie in einer Domain muss einen anderen Namen haben, damit der Browser alle Cookies getrennt halten kann. Nach dem Namen stehen die =content data, wobei 'Inhaltsdaten' die Daten sind, die im Cookie enthalten sein sollen. Diese Daten können eine Textzeichenfolge oder eine Zahl sein und, wie gesagt, eine Größe von bis zu 4 KB haben.
  • expires= ist der Befehl für das Ablaufdatum. Das Ablaufdatum ist im Format "Wdy, TT-Mo-JJJJ HH:MM:SS GMT" (Fragen Sie mich nicht, warum es für dieses lächerliche Format definiert wurde, da ich es auch nicht weiß. Kein Benutzer sieht jemals das Ablaufdatum. Warum also Speicher, Festplattenspeicher und Bandbreite an langen Daten verschwenden?). Machen Sie sich darüber keine Sorgen, da die meisten Programmiersprachen über benutzerfreundliche Funktionen verfügen. Der Browser löscht automatisch Cookies mit einem Ablaufdatum in der Vergangenheit.
  • Die domain und der path bedürfen einer tieferen Erklärung. Die Domain ist die Domain, in der das Cookie aktiv sein wird. Wenn die Domain 'ads.google.com' lautet, wird das Cookie nur an den Server dieser Domain gesendet. Wenn die Domain "google.com" lautet, wird das Cookie an einen Server einer der Subdomains von gesendet Google, einschließlich google.com selbst.
  • Der path ist der Pfad der Domäne, an die das Cookie gesendet wird. Dies bedeutet, dass, wenn der Pfad auf '/images/' und die Domain auf 'ads.google.com' festgelegt ist, das Cookie nur an den Server gesendet wird, wenn der Browser eine Datei von 'ads.google.com/images/' anfordert. Wenn der Pfad auf '/' gesetzt ist, wird das Cookie unabhängig vom Speicherort der angeforderten Datei auf dem Server an den Server gesendet.

Im nächsten Schritt werden wir überprüfen, wie diese Eigenschaften in Programmiersprachen verwendet werden können.


Schritt 2. Erstellen und Lesen der Cookies

Cookies können auf viele Arten erstellt werden. In diesem Tutorial konzentrieren wir uns jedoch auf PHP und JavaScript.

PHP

Das Wichtigste beim Erstellen eines Cookies in PHP ist, dass Sie alle Cookies setzen müssen, bevor Sie Daten an den Browser senden. Dies bedeutet, dass Sie vor jeder Ausgabe immer neue Cookies initialisieren sollten. Dies umfasst die Befehle echo() oder print() sowie die Tags <html > oder <body>. Natürlich gibt es einige Ausnahmen, aber dies ist eine allgemeine Faustregel.

Dies sollte inzwischen bekannt erscheinen, mit Ausnahme von $secure und $httponly. Mit 'sicher' wird erzwungen, dass das Cookie nur gesendet wird, wenn eine HTTPS-Verbindung hergestellt wurde, wenn es auf true gesetzt ist und normalerweise auf false gesetzt werden sollte. Das 'httponly' macht das Cookie nur über das HTTP-Protokoll verfügbar, was bedeutet, dass clientseitige Sprachen wie JavaScript und VBscript nicht auf das Cookie zugreifen können. Dies hilft, böse Dinge wie Cross Site Scripting zu vermeiden, und sollte auf true gesetzt werden, wenn Sie nicht beabsichtigen, die Cookies clientseitig mit einer Sprache wie JavaScript zu bearbeiten. Um Missverständnissen vorzubeugen, bedeutet "httponly" nicht, dass Cookies nicht über HTTPS gesendet werden können, da dies tatsächlich immer noch möglich ist. Bitte beachten Sie jedoch, dass das obige Snippet ziemlich kleiner gemacht werden kann (und sollte):

Toll! Jetzt können wir Cookies erstellen, aber wir müssen sie auch lesen können. Zum Glück macht PHP dies sehr einfach, sobald bereits ein Cookie erstellt wurde. In PHP gibt es eine Umgebungsvariable namens $ _COOKIE[], mit der der Wert des Cookies extrahiert werden kann. Um es zu verwenden, fügen Sie einfach den Namen des Cookies wie folgt in die Klammern [] ein:

Diese Umgebungsvariable kann wie jede andere verwendet werden. Genau wie $_GET[] und $_POST[] kann es direkt als normale Variable behandelt werden (nachdem Sie überprüft haben, ob das Cookie tatsächlich vorhanden ist), wenn Sie möchten.

Wenn Sie das Ablaufdatum, den Pfad oder die Domain ändern möchten, müssen Sie ein vorhandenes Cookie mit setcookie() unter demselben Namen wie das ursprüngliche Cookie überschreiben. Wenn Sie das Ablaufdatum so ändern, dass es in der Vergangenheit liegt (z. B. time() - 30*60), wird das Cookie gelöscht.

JavaScript

Cookies können auch clientseitig gelesen und geschrieben werden. Obwohl JavaScript keine gute Lösung zum Lesen und Schreiben von Cookies bietet, ist es möglich und weit verbreitet. JavaScript verwendet das document.cookie-Objekt für die Cookie-Manipulation, wie im folgenden Snippet gezeigt:

Wie Sie vielleicht bemerkt haben, ist diese Syntax der HTTP-Protokollnotation ziemlich ähnlich. Dies hat den Vorteil, dass Sie mehr Kontrolle haben, bringt aber auch einige potenzielle Probleme mit sich. Unten finden Sie den <painful> Ausschnitt zum Lesen eines Cookies.

Ich weiß, ich weiß; Das ist ein Schmerz. Zum Glück für euch poste ich unten einige vorab geschriebene Funktionen (vielleicht wollt ihr aber eure eigenen Funktionen für Lernzwecke erstellen, und das solltet ihr!).

Bitte beachten Sie, dass diese Snippets keine Fehlerprüfung enthalten.


Schritt 3. Was tun mit Cookies?

Wussten Sie? -
Cookies wurden von Netscape erfunden, das sie zum Erstellen eines Einkaufswagens für einen Online-Shop verwenden wollte. Dank Cookies konnten die Leute Artikel auch nach dem Trennen vom Shop in ihrem Warenkorb behalten.

Heutzutage verwenden wir Cookies für fast jeden erdenklichen Zweck. Sie können sie zum Speichern von Benutzereinstellungen wie Name, Sprache, Speicherort oder Bildschirmgröße verwenden. Dies kann die Qualität des Dienstes verbessern, den Sie für einen Kunden bereitstellen möchten, da Sie den Dienst für einen Kunden optimieren und sich diese Optimierung in Zukunft merken können. Sie können beispielsweise die bevorzugte Sprache des Kunden in einem Cookie speichern und anschließend den Inhalt Ihrer Website bei jedem Besuch Ihrer Website in der bevorzugten Sprache anzeigen.

Natürlich gibt es viel mehr lustige Dinge mit Cookies zu tun! Im nächsten Schritt zeige ich Ihnen ein Beispiel für ein cooles Code-Snippet.


Schritt 4. Coole Sachen schreiben

Schließlich! Jetzt können wir anfangen, fantastischen Code zu schreiben! Unten finden Sie ein Bonus-Snippet, das Cookies verwendet, um einen Neuanmeldemechanismus zu erstellen.

Login-Snippet "Erinnern Sie sich an mich"

Bevor wir beginnen, enthält dieses Snippet MySQL-Code. Wenn Sie mit MySQL nicht vertraut sind, geraten Sie nicht in Panik. Obwohl dieses Snippet etwas schwierig ist, sollte es mit ein wenig grundlegendem PHP- und Cookie-Wissen verständlich sein.

Um eine "Erinnern Sie sich an mich"-Implementierung zu erstellen, müssen wir einige Dinge haben. Erstens benötigen wir eine Datenbanktabelle, die einen Benutzernamen, ein Passwort und ein Identifikationsfeld enthält. Zweitens benötigen wir eine eindeutige Zeichenfolge oder Nummer, um Clients sicher durch Cookies zu identifizieren (dies ist die Identifikation in der Datenbanktabelle). In diesem Snippet verwenden wir einen SHA-1-Digest, der nur eine Zeichenfolge ist, als Kennung. Bei sachgemäßer Verwendung bietet dies eine hervorragende Sicherheit.

Die meisten Leute geben einfach einen Benutzernamen und ein Passwort in das Cookie ein und senden es automatisch an den Server. Dies sollte jederzeit vermieden werden! Cookies werden normalerweise über eine nicht sichere Verbindung gesendet, sodass der Inhalt von potenziellen Angreifern leicht gesehen werden kann.

Wenn Sie einen Digest wie wir verwenden, sind die Chancen, zwei gleiche Digests zu erhalten, gering. Ein Digest ist eine Zeichenfolge mit vierzig Zeichen, die theoretisch immer eine vollständige zufällige Ausgabe liefern sollte, wenn die Eingabe geändert wird. In der Praxis sollten Sie dem serverseitigen Code ein Zeitlimit hinzufügen, damit der Digest nach X Minuten nicht mehr gültig ist. Dies verhindert, dass Angreifer die Cookies anderer Personen kopieren und zum Anmelden verwenden.


Schritt 5. Empfohlene Vorgehensweise

Wir haben fast das Ende dieses Tutorials erreicht. Abschließend möchte ich einige Best Practices zusammenfassen:

  • Fügen Sie niemals vertrauliche Daten in ein Cookie ein. Ein Client kann auf einem öffentlichen Computer surfen. Lassen Sie also keine persönlichen Informationen zurück.
  • Vertrauen Sie niemals Daten, die von Cookies stammen. Filtern Sie immer Zeichenfolgen und Zahlen! Ein Angreifer kann schädliche Daten in das Cookie schreiben, um etwas zu tun, das Ihr Dienst nicht tun soll.
  • Versuchen Sie zu schätzen, wie lange das Cookie gültig sein sollte, und legen Sie das Ablaufdatum entsprechend fest. Sie möchten den Computer des Kunden nicht mit alten Cookies belasten, die in hundert Jahren ablaufen sollen.
  • Stellen Sie immer sicher und httponly ein, um Ihre Anwendungsanforderungen zu erfüllen. Wenn Ihre Anwendung die Cookies nicht mit JavaScript bearbeitet, aktivieren Sie httponly. Wenn Sie immer eine HTTPS-Verbindung haben, aktivieren Sie Secure. Dies verbessert die Integrität und Vertraulichkeit der Daten.

Schlussfolgerung

Ich hoffe, Sie haben etwas aus dem heutigen Nettuts+ Tutorial gelernt. Wenn Sie Fragen haben, können Sie gerne einen Kommentar hinterlassen oder auf Twitter Hallo sagen.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.