web-dev-qa-db-fra.com

Est-il sécurisé de partager un jeton d'accès via HTML5 Messaging API entre divers iframes?

J'ai un site Web principal qui intègre 3 autres sites Web via Iframes (systèmes hérités fournissant diverses fonctionnalités avec une interface utilisateur). Actuellement, l'utilisateur doit authentifier avec chacun des systèmes malgré qu'ils utilisent tous le même serveur d'autorisation. Afin de la rendre conviviale, je pensais à partager le jeton d'accès sur les différents iframes à l'aide de l'API de messagerie HTML5 et je vous demandais si cette approche est viable d'un point de vue de sécurité?

7
westbeam87

Le API PostMessage est conçu pour la communication croisée dans le cadre du mécanisme de partage des ressources d'origine croisée.

La méthode Window.PostMessage (), introduite dans HTML5, permet à JavaScript Code exécuté sur différentes origines de communiquer entre elles de manière bidirectionnelle. Cette API peut être utilisée pour la communication entre un iframe et son document parent. De même, il peut être utilisé par une page HTML et une fenêtre enfant pour échanger des messages, tels qu'une vidéo tierce partie intégrée en notifiant son cadre parent lorsque l'utilisateur pause la vidéo.

Les règles de sécurité classiques s'appliquent également aux applications utilisant PostMessage (). Vous envisagez d'utiliser cette méthode pour partager des informations d'authentification qui conviennent parfaitement si vous suivez les règles de validation d'entrée de base pendant la mise en œuvre.

  1. Ne diffusez jamais vos jetons d'authentification : votre scénario contient plusieurs partis différentes qui ont besoin d'avoir accès à un jeton commun. Vous pourriez être tenté de diffuser les informations d'authentification afin que tous les iframes y accèdent. Cela peut entraîner un accès non autorisé à vos jetons. Par conséquent, l'appel PostMessage () doit toujours spécifier l'origine cible.

  2. Validez toujours l'origine du message : Vous devez valider que le message a été reçu d'une origine valide et attendue. Seule la validation après l'origine, vous devez utiliser le message dans la logique de l'application. Imaginez un cas où votre application est iframed par un domaine malveillant. Si vous ne validez pas l'origine du message, cela peut entraîner une injection de script.

De plus, en fonction de votre relation de confiance avec le serveur d'autorisation, vous souhaiterez peut-être valider le jeton lui-même une fois que l'origine de l'expéditeur est validée.

Pour une analyse plus détaillée de la sécurité API PostMessage () avec quelques exemples d'extraits de code, reportez-vous à My Blog

2
Shurmajee

Vous pouvez lire sur les règles que les navigateurs modernes suivent sur le contrôle de cookie et de domaine d'accès: RFC6265

Les iframes pour de nombreuses raisons sont non recommandés (comme le référencement, l'indexation de Google, la sécurité, ...).

La nouvelle version des navigateurs avec la configuration de domaine de cookie par défaut est 99% Secure à ce sujet. Cependant, les risques de sécurité la plus en sécurité dans l'histoire des Iframe (et des navigateurs) concernaient la CSRF et les XSS. Donc, si vous protégez vos sites par des jetons CSRF et des méthodes de filtrage XSS + une configuration de domaine de cookie correcte, même avec un navigateur vulnérable, c'est à peu près le coffre-fort pour utiliser iframe.

0
ShayanKM