La portée du cookie ne fait pas de distinction entre le protocole et le port

insérez la description de l'image ici

1. Description du problème

Le même ensemble de programmes ERP frontaux a déployé plusieurs ensembles de comptes. Le protocole et l'IP des deux ensembles de comptes sont les mêmes, mais les ports sont différents.

http://xxx.xx.x.xxx:8002
http://xxx.xx.x.xxx:9003

Lorsqu'un même utilisateur ouvre deux programmes avec des ports différents dans le même navigateur (Chrome), il y a un problème d' accès à la page de connexion .

2. Processus de dépannage

Après enquête, il a été constaté qu'il y avait un problème d'écrasement du cookie. Le processus de dépannage est le suivant :

  • Après vous être connecté 8002, obtenez Cookie sessionId=b130ffea-c9dc-46cf-b37d-e28db9ce8ea3;. À ce stade, 8002la page à onglet peut communiquer normalement avec le serveur.
  • Ouvrez un nouvel onglet, connectez-vous au 9003programme et récupérez le cookie sessionId=b74fe72d-822e-410a-965f-125540156fd7;. À ce stade, 9003la page à onglet peut communiquer normalement avec le serveur.
  • Passez à 8002la page à onglet, communiquez avec le backend à ce moment, et le cookie transporté dans la requête devient un cookie 9003 sessionId=b74fe72d-822e-410a-965f-125540156fd7. Le programme saute à la page de connexion.

Le programme frontal n'effectue aucune opération sur les cookies. Cela signifie qu'après la connexion à la deuxième page à onglet 9003, le cookie de la première page à onglet 8002est écrasé.

3. Connaissances pertinentes

Après avoir recherché les informations, je sais que par rapport à LocalStorage et SessionStorage, Cookie ne distinguera pas les ports.

Le port de cookie HTTP est-il spécifique

1. Introduction

Pour des raisons historiques, les cookies contiennent de nombreuses informations de sécurité et de confidentialité. Par exemple, un serveur peut indiquer qu'un cookie donné est destiné à une connexion "sécurisée", mais l'attribut Secure ne fournit aucune intégrité en présence d'un attaquant actif du réseau. De même, les cookies d'un hôte donné sont partagés sur tous les ports de cet hôte , même si la "politique de même origine" habituelle utilisée par les navigateurs Web isole le contenu récupéré via différents ports.

8.5 Confidentialité faible

Les cookies ne permettent pas d'isoler les ports . Si le cookie est lisible par un service s'exécutant sur un port, le cookie est également lisible par un service s'exécutant 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 s'exécutant sur un autre port sur le même serveur. Pour cette raison, les serveurs ne doivent pas exécuter de services mutuellement non fiables sur différents ports du même hôte et utiliser des cookies pour stocker des informations sensibles à la sécurité.

[Google] Manuel de sécurité du navigateur

Par défaut, la portée des cookies est limitée à toutes les URL sur le nom d'hôte actuel - non liée aux informations de port ou de protocole.

Lors du saut
entre http://localhost:3000 et http://localhost:4000, Chrome transmettra le même cookie, et chaque service ne pourra pas comprendre le cookie et générer un nouveau cookie.

Mais si vous visitez http://localhost:3000 et http://127.0.0.1:4000, il n'y aura aucun problème. Parce que Chrome conserve un cookie pour localhost et un pour 127.0.0.1

4. Solutions

  1. Utilisez deux navigateurs pour ouvrir la page séparément
  2. Abandonnez les cookies, utilisez sessionStorage ou localstorage pour enregistrer les jetons utilisateur et utilisez l'en-tête de requête
token:b74fe72d-822e-410a-965f-125540156fd7

5. Impressions

Lorsque vous rencontrez ce problème, la première chose qui vous vient à l'esprit est de vérifier la portée du cookie sur mdn et d'apprendre qu'il existe deux attributs qui affectent la portée du cookie : Domain et Path. Dans cette question, nous n'avons pas défini de domaine et de chemin.La valeur par défaut de Path que nous avons vérifiée est le même domaine que orgin (politique de même origine du navigateur), ce qui me rend très confus.Maintenant, le port est différent, n'est-ce pas juste un autre domaine ? La réponse est comme mentionné ci-dessus : La portée des cookies ne fait pas de distinction entre les protocoles et les ports , c'est-à-dire que tant que l'adresse IP est la même, le protocole est différent ou le port est différent, le cookie sera couvert.

Je suppose que tu aimes

Origine blog.csdn.net/zqd_java/article/details/126126776
conseillé
Classement