329 votes

Les cookies HTTP sont-ils spécifiques à un port ?

J'ai deux services HTTP qui fonctionnent sur une machine. Je veux juste savoir s'ils partagent leurs cookies ou si le navigateur fait la distinction entre les deux sockets du serveur.

308voto

Remy Lebeau Points 130112

La spécification actuelle des cookies est la suivante RFC 6265 qui remplace RFC 2109 et RFC 2965 (les deux RFC sont maintenant marquées comme "historiques") et formalise la syntaxe pour les utilisations réelles des cookies. Elle indique clairement :

  1. Introduction

...

Pour des raisons historiques, les cookies contiennent un certain nombre d'infélicités en matière de sécurité et de confidentialité. Par exemple, un serveur peut indiquer qu'un cookie donné est destiné à des connexions "sécurisées", mais l'attribut "sécurisé" ne garantit pas l'intégrité en présence d'un attaquant de réseau actif. De même, les cookies d'un hôte donné sont partagés entre tous les ports de cet hôte, même si la "politique d'origine identique" utilisée par les navigateurs web isole le contenu récupéré via différents ports.

Et aussi :

8.5. Faible confidentialité

Les cookies ne fournissent pas d'isolation par port . Si un cookie est lisible par un service fonctionnant sur un port, le cookie est également lisible par un service fonctionnant sur un autre port du même serveur. Si un cookie est accessible en écriture par un service sur un port, le cookie est également accessible en écriture par un service fonctionnant sur un autre port du même serveur. Pour cette raison, les serveurs NE DOIVENT PAS à la fois exécuter des services se méfiant mutuellement sur différents ports du même hôte et utiliser des cookies pour stocker des informations sensibles en matière de sécurité.

128voto

Tgr Points 11766

Selon RFC2965 3.3.1 (qui peut ou non être suivie par les navigateurs), à moins que le port ne soit explicitement spécifié via l'attribut port du paramètre Set-Cookie les cookies peuvent ou non être envoyés à un port.

Le site de Google Manuel de sécurité des navigateurs dit : par défaut, la portée des cookies est limitée à toutes les URL sur le nom d'hôte actuel - et n'est pas liée aux informations de port ou de protocole. et quelques lignes plus loin Il n'y a aucun moyen de limiter les cookies à un seul nom DNS [...] de même, il n'y a aucun moyen de les limiter à un port spécifique. (N'oubliez pas non plus qu'IE ne prend pas en compte les numéros de port dans sa politique d'origine identique. du tout .)

Il ne semble donc pas possible de se fier à un comportement bien défini dans ce cas.

65voto

Pat Points 1291

C'est une très vieille question mais j'ai pensé ajouter une solution de rechange que j'ai utilisée.

J'ai deux services qui fonctionnent sur mon ordinateur portable (un sur le port 3000 et l'autre sur le 4000). Lorsque je passe d'un service à l'autre ( http://localhost:3000 et http://localhost:4000 ), Chrome transmettrait le même cookie, chaque service ne comprendrait pas le cookie et en générerait un nouveau.

J'ai découvert que si j'accédais http://localhost:3000 et http://127.0.0.1:4000 le problème a disparu puisque Chrome a conservé un cookie pour localhost et un autre pour 127.0.0.1.

Encore une fois, personne ne s'en soucie à ce stade, mais c'était facile et utile pour ma situation.

19voto

ZZ Coder Points 36990

Il s'agit d'une grande zone grise dans la SOP (Same Origin Policy) des cookies.

Théoriquement, vous pouvez spécifier un numéro de port dans le domaine et le cookie ne sera pas partagé. En pratique, cela ne fonctionne pas avec plusieurs navigateurs et vous rencontrerez d'autres problèmes. Cette solution n'est donc envisageable que si vos sites ne sont pas destinés au grand public et si vous pouvez contrôler les navigateurs utilisés.

La meilleure approche consiste à obtenir deux noms de domaine pour la même IP et à ne pas se fier aux numéros de port pour les cookies.

17voto

Une autre façon de contourner le problème est de faire en sorte que le nom du cookie de session soit lié au port. Par exemple :

  • mysession8080 pour le serveur fonctionnant sur le port 8080
  • mysession8000 pour le serveur fonctionnant sur le port 8000

Votre code pourrait accéder à la configuration du serveur Web pour savoir quel port votre serveur utilise et nommer le cookie en conséquence.

Gardez à l'esprit que votre application recevra les deux cookies, et que vous devez demander celui qui correspond à votre port.

Il n'est pas nécessaire d'avoir le numéro de port exact dans le nom du cookie, mais c'est plus pratique.

En général, le nom du cookie pourrait coder tout autre paramètre spécifique à l'instance de serveur que vous utilisez, de sorte qu'il puisse être décodé par le bon contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X