web-dev-qa-db-fra.com

Pourquoi les demandes iframe n'envoient-elles pas de cookies?

Un service frère a créé un fichier HTML qui est en fait un échafaudage pour une poignée d'iframes. Les iframes appellent chacun un rapport, qui est hébergé sur un serveur Web, avec des paramètres légèrement différents. Le rapport appelé affichera un formulaire de connexion pour les utilisateurs non authentifiés ou le contenu du rapport pour les utilisateurs déjà authentifiés.

scaffold.html:

<html>
   <head>
      <title>I just show the output from a bunch of report calls</title>
   </head>
   <body>
      <iframe src="https://somesite.com/useful_report.html?parameter1=a&parameter2=1" id="iframe1"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=b&parameter2=2" id="iframe2"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=c&parameter2=3" id="iframe3"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=d&parameter2=4" id="iframe4"></iframe>
   </body>
</html>

L'organisation sœur nous a expliqué que si un utilisateur était connecté à https://somesite.com , la configuration ci-dessus fonctionnait très bien - chacun des iframes afficherait le contenu utile_report.html ... jusqu'à il y a quelques jours.

Quand je

  1. connectez-vous à https://somesite.com , puis
  2. charger le fichier: /// C: /Users/me/Desktop/scaffold.html dans Chrome

chacun des iframes renvoie le formulaire de connexion https://somesite.com . Si j'ouvre ensuite utile_report.html dans un onglet séparé, le contenu du rapport se charge (prouvant que somesite.com sait que je suis toujours connecté ‡).

En utilisant des outils de développement, je peux voir que les en-têtes de demande à utile_report.html n'incluent pas l'attribut "Cookie:", donc cela explique pourquoi utile_report.html renvoie le formulaire de connexion.

Ma question est pourquoi les demandes iframe n'envoient-elles pas de cookies? Qu'est-ce Chrome et/ou paramètre du serveur/politique/directive l'empêche?

‡ - et maintenant il sait que je sais qu'il sait.

14
Jeromy French

C'est à cause de la politique de cookies de SameSite qui Chrome par défaut Lax , ce qui signifie que les cookies ne seront pas envoyés à moins que l'utilisateur ne puisse voir l'URL qui exclut les iframes.

Si vous possédez le somesite.com vous pouvez désactiver cette politique en définissant la politique de SameSite sur Aucun et gérer le risque d'attaques CSRF en faisant --- Double Submit Cookie =.

3
Arash.m.h

Si vous souhaitez utiliser ajax ou jquery ajax natif, supprimez async: false. ça a marché pour moi.

Pour plus de compatibilité avec les anciens navigateurs, je recommande d'utiliser http://easyxdm.net/wp/ . L'approche EasyXDM consiste à utiliser un hack iframe qui vous oblige à placer un fichier html sur l'hôte auquel vous effectuez des appels ajax. Et ce sera asynchrone avec force, oui. Mais ce qui est agréable avec cet easyXDM, c'est que vous n'aurez pas à vous soucier des en-têtes cors.

0
user10643043