2010-04-15 10 views
9

Wie ich verschlüsseln kann und später einen Wert eines Cookies in PHP entschlüsseln (wie sicher ist die Verschlüsselung sein)Encrypting Cookies in PHP

+4

Ich sehe nicht, wie das hilfreich ist, sollten Sie $ _SESSION [] für sensible Informationen verwenden. – rook

Antwort

-1

Ich kann nicht einfach an eine Situation denken, in der die Verschlüsselung von Daten im Cookie nützlich ist. Wenn Sie vertrauliche Daten über den Benutzer oder seine Voreinstellungen, Informationen usw. speichern möchten, speichern Sie diese auf dem Server in Dateien, in der Sitzung oder in der Datenbank, nicht jedoch auf dem Computer des Clients.

Wenn Sie dagegen eine Authentifizierung erstellen, sollten Sie Sitzungen verwenden, anstatt verschlüsselte verschlüsselte Cookie-Werte zu erstellen. Sitzungen wurden nicht für nichts implementiert, sie sind der Weg zu gehen.

+4

Ist das nicht ein riesiger Teil einer RESTful-API-Statuslosigkeit? In diesem Fall ist die Speicherung sensibler Daten über verschlüsselte Cookies mit einem geheimen Schlüssel sehr wichtig.Oder fehlt mir etwas? – PandemoniumSyndicate

+0

Wenn Ihre API wirklich zustandslos ist, gibt es keine Sitzung. Sollte der Kunde auf Anfrage für Speicherinformationen verantwortlich sein. – TlmaK0

+2

"Ich kann mir nicht einfach eine Situation vorstellen, in der die Verschlüsselung von Daten im Cookie nützlich ist." Der OP fragte nicht, ob Sie das könnten oder nicht; Vermutlich weiß das OP "warum", er fragte "wie". Du hast diese Frage nicht beantwortet. –

8

Es gibt eine Vielzahl von verschiedenen Möglichkeiten, Informationen in Cookies zu verschlüsseln und anderswo. Die Stärke der Verschlüsselung hängt von der Methode ab, die Sie für die eigentliche Verschlüsselung gewählt haben. mycrypt ist ein guter Anfang. See this answer für ein Beispiel der Verwendung von Mcrypt.

Ich empfehle nicht, etwas sensibles in einen Cookie zu setzen, auch wenn es verschlüsselt werden soll. Viel zu verlockend für jemanden zu knacken. Versuchen Sie, bei Sitzungen zu bleiben, wenn Sie können.

+0

"Viel zu verlockend, dass jemand knackt" Aber ... vermutlich ... wenn du starke Kryptos verwendest, ohne den Schlüssel, können sie es nicht knacken. Und wenn sie den Schlüssel haben, bedeutet das, dass sie Ihren Server bereits geknackt haben (in einem ziemlich schädlichen Ausmaß), so dass Sie größere Probleme haben müssen. Die Ablaufzeit des Cookies könnte zum Beispiel als speichersensibel angesehen werden auf dem Client, aber der Vorteil, es verschlüsselt clientseitig zu speichern, ist klar: Sie können sofort überprüfen, ob eine Sitzung noch gültig ist, und wenn sie Ihre Box nicht geknackt haben, können sie es sowieso nicht einstellen. –

0

Ich bin voll und ganz einverstanden mit den anderen Antworten: Wenn die Daten wirklich empfindlich sind, sollte es serverseitig in einer Sitzung gespeichert werden, nicht in einem Cookie.

Soweit Möglichkeiten zum Verschlüsseln von Cookie-Inhalten bietet die Suhosin PHP-Erweiterung die Möglichkeit transparently encrypt all cookies. Wenn Sie die Möglichkeit haben, PHP-Erweiterungen zu installieren, ist dies möglicherweise einfacher für Sie als das Schreiben eines eigenen Verschlüsselungsschemas.

-1

Wenn der Cookie sicher verschlüsselt ist (zum Beispiel mit einem Server-gespeicherten Geheimnis, das sich regelmäßig ändert), sehe ich kein Problem beim Speichern nützlicher Daten im Cookie. Warum auf dem Server speichern? Sorgen Sie dafür, dass der Kunde etwas für eine Veränderung tut - vor allem, wenn es sich um Vorlieben handelt. Warum sollte der Server Daten aus einer Sitzungsdatei ständig speichern und abrufen müssen? Was passiert, wenn Hunderttausende von Nutzern Ihre Website stopfen? Jetzt müssen Sie Hunderttausende Sitzungsdateien verwalten.

+1

Die Frage des OP war "Wie kann ich Cookies in PHP verschlüsseln, und wie sicher wäre das?", Und Ihre Antwort war: "Ich könnte sehen, dass eine nützliche Sache eine Person wäre möchte tun ". Kein Teil der Frage des OP wurde hier beantwortet. –

0

Ich kann eine vernünftige Verwendung dafür denken. Angenommen, Sie haben eine große Serverfarm, haben Sie einen Engpass auf der Datenbank und/oder dem memcached Server für die Behandlung von Sitzungsanforderungen. "Ist dieser Benutzer angemeldet?"

Wenn Sie die Sitzungsdaten des Benutzers als verschlüsselten Wert im Cookie speichern, können Sie verhindern, dass Sie einige Lese-/Schreibvorgänge ausführen müssen und einen unbegrenzten Cookie-Speicher zulassen, da es 0 Auswirkungen auf Ihre Seite hat anders als CPU-gebunden für die Verschlüsselung/Entschlüsselung der Cookie-Daten.

Ruby on Rails tut dies standardmäßig - obwohl es nur die Daten signiert und nicht verschlüsselt. Es gibt eine alternative Implementierung, die die Daten mit einem eigenen Schlüssel und einer eigenen Signatur verschlüsselt, sodass der Benutzer nicht sehen kann, welche Daten in seiner Sitzung gespeichert werden.

+1

Die Frage des OP war "Wie kann ich Cookies in PHP verschlüsseln und wie sicher wäre das?", Und Ihre Antwort lautete: "Ich könnte sehen, dass es eine nützliche Sache ist, die eine Person tun möchte". Kein Teil der Frage des OP wurde hier beantwortet. –