491 Stimmen

Sind HTTP-Cookies portspezifisch?

Ich habe zwei HTTP-Dienste auf einem Rechner laufen. Ich möchte nur wissen, ob sie ihre Cookies gemeinsam nutzen oder ob der Browser zwischen den beiden Server-Sockets unterscheidet.

459voto

Remy Lebeau Punkte 498719

Die aktuelle Cookie-Spezifikation lautet RFC 6265 , das ersetzt RFC 2109 et RFC 2965 (beide RFCs sind jetzt als "Historisch" gekennzeichnet) und formalisiert die Syntax für die reale Verwendung von Cookies. Sie legt eindeutig fest:

  1. Einführung

...

Aus historischen Gründen enthalten Cookies eine Reihe von Unzulänglichkeiten in Bezug auf Sicherheit und Datenschutz. So kann ein Server beispielsweise angeben, dass ein bestimmtes Cookie für "sichere" Verbindungen bestimmt ist, aber das Attribut "sicher" bietet keine Integrität, wenn ein aktiver Netzwerkangreifer anwesend ist. In ähnlicher Weise werden Cookies für einen bestimmten Host über alle Ports dieses Hosts verteilt, obwohl die übliche "same-origin policy", die von Webbrowsern verwendet wird, Inhalte, die über verschiedene Ports abgerufen werden, isoliert.

Und außerdem:

8.5. Schwache Vertraulichkeit

Cookies bieten keine Isolierung nach Port . Wenn ein Cookie von einem Dienst, der auf einem Port läuft, gelesen werden kann, kann das Cookie auch von einem Dienst, der auf einem anderen Port desselben Servers läuft, gelesen werden. Ist ein Cookie für einen Dienst an einem Port beschreibbar, so ist es auch für einen Dienst an einem anderen Port desselben Servers beschreibbar. Aus diesem Grund SOLLTEN Server NICHT gleichzeitig Dienste, die sich gegenseitig misstrauen, auf verschiedenen Ports desselben Hosts laufen lassen und Cookies zur Speicherung sicherheitsrelevanter Informationen verwenden.

153voto

Tgr Punkte 26333

Según RFC2965 3.3.1 (die von den Browsern befolgt werden kann, aber nicht muss), es sei denn, der Port wird explizit über die Option port Parameter des Set-Cookie Header, können Cookies an jeden beliebigen Port gesendet werden oder auch nicht.

Google's Browser-Sicherheitshandbuch sagt: Standardmäßig ist der Geltungsbereich von Cookies auf alle URLs auf dem aktuellen Hostnamen beschränkt - und nicht an Port- oder Protokollinformationen gebunden. und einige Zeilen später Es gibt keine Möglichkeit, Cookies nur auf einen einzigen DNS-Namen zu beschränken [...] Ebenso wenig können sie auf einen bestimmten Port beschränkt werden. (Denken Sie auch daran, dass der IE Port-Nummern nicht in seine Same-Origin-Policy einbezieht. überhaupt .)

Es scheint also nicht sicher zu sein, sich hier auf ein genau definiertes Verhalten zu verlassen.

118voto

Pat Punkte 2201

Diese Frage ist schon sehr alt, aber ich dachte, ich füge eine Lösung hinzu, die ich verwendet habe.

Auf meinem Laptop laufen zwei Dienste (einer auf Port 3000 und der andere auf 4000). Wenn ich zwischen ( http://localhost:3000 et http://localhost:4000 ), würde Chrome das gleiche Cookie übergeben, jeder Dienst würde das Cookie nicht verstehen und ein neues generieren.

Ich habe festgestellt, dass ich, wenn ich auf http://localhost:3000 et http://127.0.0.1:4000 Das Problem ist verschwunden, da Chrome ein Cookie für localhost und eines für 127.0.0.1 behält.

Wie gesagt, das mag jetzt niemanden interessieren, aber es war einfach und hilfreich für meine Situation.

23voto

ZZ Coder Punkte 72742

Dies ist eine große Grauzone in der Cookie SOP (Same Origin Policy).

Theoretisch können Sie die Portnummer in der Domäne angeben und das Cookie wird nicht weitergegeben. In der Praxis funktioniert dies bei einigen Browsern nicht und es treten andere Probleme auf. Dies ist also nur möglich, wenn Ihre Websites nicht für die breite Öffentlichkeit bestimmt sind und Sie kontrollieren können, welche Browser verwendet werden.

Der bessere Ansatz ist, 2 Domänennamen für dieselbe IP zu erhalten und sich nicht auf Portnummern für Cookies zu verlassen.

20voto

Eine andere Möglichkeit, das Problem zu umgehen, besteht darin, den Namen des Sitzungscookies portbezogen zu gestalten. Zum Beispiel:

  • mysession8080 für den Server, der auf Port 8080 läuft
  • mysession8000 für den Server, der auf Port 8000 läuft

Ihr Code könnte auf die Webserver-Konfiguration zugreifen, um herauszufinden, welchen Port Ihr Server verwendet, und das Cookie entsprechend benennen.

Denken Sie daran, dass Ihre Anwendung beide Cookies erhalten wird und Sie dasjenige anfordern müssen, das Ihrem Port entspricht.

Es ist nicht notwendig, die genaue Portnummer im Cookie-Namen anzugeben, aber es ist bequemer.

Im Allgemeinen kann der Cookie-Name jeden anderen Parameter kodieren, der für die von Ihnen verwendete Serverinstanz spezifisch ist, so dass er durch den richtigen Kontext dekodiert werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X