Sie haben vielleicht von Cookies gehört, aber was genau sind sie und was können wir eigentlich mit ihnen machen? In diesem Tutorial konzentrieren wir uns auf die Grundlagen von Cookies und lernen deren Funktionalität in verschiedenen Webanwendungen und Websiteumgebungen kennen. Wir lernen auch, wie Sie sie in unseren PHP- und JavaScript-Projekten verwenden können, und achten dabei besonders auf mögliche Sicherheitsprobleme. Nach dem Lesen haben Sie die erforderlichen Fähigkeiten erworben, um Cookies sicher in Ihre eigenen Webanwendungen zu implementieren.
Der erste Schritt auf unserer Reise besteht darin, herauszufinden, was diese Cookies eigentlich sind! Auch wenn Sie bereits mit ihnen gearbeitet haben, kann dieser Teil dennoch nützlich sein - bleiben Sie also bei mir!
Cookies können am einfachsten als Textdateien betrachtet werden, die auf Ihrem Computer gespeichert werden. Auf Anforderung eines Webservers erstellt Ihr Browser eine solche Datei. Danach kann der Webserver Inhalte aus und in diese Datei lesen und schreiben. Obwohl dies als eine gefährliche Funktion erscheint - niemand mag es, dass andere Leute Dateien auf ihren Computer schreiben, es gibt jedoch einige Einschränkungen, um diesen Prozess so sicher wie möglich zu gestalten.
Cookies haben ein Ablaufdatum. Dieses Datum ist so eingestellt, 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 geschieht, 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 Sitzungs-Cookies genannt, werden hauptsächlich zum Speichern temporärer Einstellungen verwendet.
Lassen Sie uns herausfinden, wie diese Dinge auf technischer Ebene aussehen. Cookies werden über das HTTP-Protokoll übertragen. Dieses Protokoll wird von Browsern verwendet, um Dateien abzurufen und an den Server zu senden. Nachdem ein Cookie angefordert wurde, wird es jedes Mal an den Server gesendet, wenn ein neuer Artikel auf der Webseite vom Browser abgerufen wird. Unten sehen Sie einen Ausschnitt eines Servers, der ein neues Cookie anfordert (dieser Ausschnitt ist Teil einer HTTP-Antwort)..
Set-Cookie: Name = Inhaltsdaten; verfällt = Fri, 31-Dec-2010 23:59:59 GMT; Pfad = /; domain = .example.net
Jetzt keine Angst haben, es ist alles sehr verständlich!
Im nächsten Schritt überprüfen wir, wie diese Eigenschaften in Programmiersprachen verwendet werden können.
Cookies können auf verschiedene Arten erstellt werden. In diesem Lernprogramm werden wir uns jedoch auf PHP und JavaScript konzentrieren.
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 sollten immer neue Cookies initialisieren Vor jede Ausgabe. Dazu gehören die Befehle echo () oder print () und die oder
Stichworte. Natürlich gibt es einige Ausnahmen, aber dies ist eine allgemeine Faustregel.… // geht der gesamte Inhalt usw. hier?>
Dies sollte inzwischen bekannt sein, außer für $ sicher und $ httponly. Das 'Sichere' besteht darin, das Cookie nur dann zu senden, wenn eine HTTPS-Verbindung hergestellt wurde, wenn es auf true gesetzt ist und normalerweise auf false gesetzt ist. Das "httponly" macht das Cookie nur über das HTTP-Protokoll verfügbar. Dies 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 die Absicht haben, die Cookies mit einer Sprache wie JavaScript clientseitig zu bearbeiten. Um Missverständnissen vorzubeugen, bedeutet "httponly" nicht, dass Cookies nicht über HTTPS gesendet werden können, da sie dies immer noch können. Beachten Sie jedoch, dass das obige Snippet etwas kleiner gemacht werden kann (und sollte):
Großartig! Jetzt können wir Cookies erstellen, aber wir müssen sie auch lesen können. Glücklicherweise macht PHP dies sehr einfach, wenn bereits ein Cookie erstellt wurde. In PHP gibt es eine Umgebungsvariable namens $ _COOKIE [], mit der der Wert des Cookies ermittelt werden kann. Um es zu benutzen, füge einfach den Namen des Cookies in die Klammern [] ein:
Diese Umgebungsvariable kann wie jede andere verwendet werden. Genau wie $ _GET [] und $ _POST [] kann sie direkt als normale Variable behandelt werden (wenn Sie einmal geprüft haben, ob der Cookie tatsächlich existiert), wenn Sie möchten.
Wenn Sie das Ablaufdatum, den Pfad oder die Domäne ändern möchten, müssen Sie einen vorhandenen Cookie mit setcookie () überschreiben, wobei derselbe Name wie beim ursprünglichen Cookie verwendet wird. Wenn Sie das Ablaufdatum in der Vergangenheit ändern (z. B. time () - 30 * 60), wird der Cookie gelöscht.
Cookies können auch clientseitig gelesen und geschrieben werden. Auch wenn 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-Bearbeitung, wie im folgenden Snippet gezeigt:
// Aktuelles Datum abrufen var abgelaufen = neues Datum (); // Datum um 5 Stunden verlängern abgelaufen.setHours (abgelaufen.getHours () + 5); document.cookie = 'cookiename = cookievalue; expires = "+ expiredate.toUTCString () +" path = / example /; domain = test.envato.com ';
Wie Sie vielleicht bemerkt haben, ähnelt diese Syntax der HTTP-Protokollnotation. Dies hat den Vorteil einer besseren Kontrolle, bringt jedoch auch einige potenzielle Probleme mit sich. Unten ist der
var cookieName = 'Testcookiename'; var textArray = document.cookie.split (';'); // füge alle Teile des Strings in einem Array für (var i = 0; i < textArray.length; i++) // loop though all string pieces var textPiece = textArray[i]; //contains 1 string piece //filter beginning spaces while(textPiece(0)==") textPiece = textPiece.substring(1,textPiece.length); //if the textpiece contains our cookies name if (textPiece.indexOf(cookieName)== 0) //return whats after the cookies name return textPiece.substring(cookieName.length,c.length);
Ich weiß, ich weiß; das ist ein schmerz. Zum Glück für euch, ich schreibe ein paar vorab geschriebene Funktionen (vielleicht möchten Sie Ihre eigenen Funktionen zu Lernzwecken erstellen, und das sollten Sie auch!).
Funktion writeCookie (cookieName, cookieValue, expireHours, Pfad, Domäne) var date = new Date (); date.setHours (date.getHours + expireHours); document.cookie = cookiename + '=' + cookieValue + '; verfällt = "+ Datum +"; Pfad = "+ Pfad +"; domain = "+ domain; Funktion readCookie (cookieName) var textArray = document.cookie.split ("; '); für (var i = 0; i < textArray.length; i++) var textPiece = textArray[i]; while(textPiece(0)==") textPiece = textPiece.substring(1,textPiece.length); if (textPiece.indexOf(cookieName)== 0) return textPiece.substring(cookieName.length,c.length);
Bitte beachten Sie, dass diese Ausschnitte keine Fehlerprüfung enthalten.
Wusstest du? -
Cookies wurden von Netscape erfunden, die sie zur Erstellung eines Warenkorbs für einen Online-Shop verwenden wollten. Dank Cookies konnten die Leute ihren Artikel auch nach dem Trennen der Verbindung behalten.
Heutzutage verwenden wir Cookies für fast jeden Zweck, den Sie sich vorstellen können. Sie können sie zum Speichern von Benutzereinstellungen wie Name, Sprache, Ort 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 an diese Optimierung in der Zukunft erinnern 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 mit Keksen viel mehr Spaß als mit diesem! Im nächsten Schritt zeige ich Ihnen ein Beispiel für ein cooles Code-Snippet.
Endlich! Jetzt können wir anfangen, fantastischen Code zu schreiben! Nachfolgend finden Sie ein Bonus-Snippet, das Cookies verwendet, um einen Relogin-Mechanismus zu erstellen.
Bevor wir beginnen, enthält dieses Snippet etwas MySQL-Code. Wenn Sie sich mit MySQL nicht auskennen, geraten Sie nicht in Panik. Obwohl dieses Snippet etwas schwierig ist, sollte es mit ein wenig PHP- und Cookie-Grundkenntnissen verständlich sein.
Um eine Implementierung der "Erinnerung an mich" zu erstellen, müssen wir ein paar Dinge haben. Erstens benötigen wir eine Datenbanktabelle, die einen Benutzernamen, ein Kennwort 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 Bezeichner. Bei bestimmungsgemäßer Verwendung bietet dies hervorragende Sicherheit.
Die meisten Benutzer geben einfach einen Benutzernamen und ein Passwort in das Cookie ein und senden es automatisch an den Server. Dies sollte zu jeder Zeit vermieden werden! Cookies werden normalerweise über eine nicht sichere Verbindung gesendet, sodass der Inhalt von potenziellen Angreifern leicht gesehen werden kann.
Nutzername; // Hier sollten Sie einen neuen Digest für das nächste Relogin mit dem obigen Code einstellen! echo 'Sie haben sich erfolgreich angemeldet.' $ username; else // Digest existierte nicht (oder es wurden mehrere Digests gefunden, aber das wird nicht passieren) echo "Anmeldung fehlgeschlagen!"; ?>
Bei Verwendung eines Digests wie wir, sind die Chancen, zwei gleiche Digests zu erhalten, winzig. Ein Digest ist eine vierzig Zeichenfolge, die theoretisch immer eine vollständige Zufallsausgabe bereitstellen 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 gültig ist. Dadurch wird verhindert, dass Angreifer die Cookies von Personen kopieren und zum Anmelden verwenden.
Wir sind fast am Ende dieses Tutorials angelangt. Zum Abschluss möchte ich einige Best Practices zusammenfassen:
Ich hoffe, Sie haben aus dem heutigen Nettuts + Tutorial etwas gelernt. Wenn Sie Fragen haben, können Sie einen Kommentar hinterlassen oder auf Twitter Hallo sagen.