Empêcher une IFRAME de rediriger vers un onglet top-level

Certains sites Web ont un code pour rediriger une fenêtre placée en IFRAME vers un onglet top-level. L’IFRAME redirige la page qui la contient vers le site web lui-même, ce qui n’est pas le comportement voulu. Aucune directive same origin policy n’existe, le site s’ouvre normalement comme s’il n’y a avait pas d’IFRAME, mais seulement un lien.

Incrustation d'une iframe Youtube
Incrustation d’une iframe Youtube

Prenons une page B chargée en IFRAME à l’intérieur d’une page parent A. Un script Javascript dans la page B redirige vers un nouvel onglet. Typiquement, ce code ressemble à:

Afin d’empêcher ce comportement, le HTML5 permet de definir un nouvel attribut sandbox. On ajoute cela à l’iframe:

La saisie dans les formulaires et l’exécution de scripts sont autorisées, mais prévient la navigation top-level. Si on veut permettre ce comportement, on ajoute: sandbox="allow-top-navigation" .

Et hop, une jolie IFRAME qui reste sur votre site.

Une manière de prévenir l’incrustation d’un site en IFRAME est d’ajouter la directive same origin policy dans l’entête de la page dans la configuration Apache, Nginx, ou autre. La directive meta <meta http-equiv="X-Frame-Options" content="deny">  n ‘a pas d’effet. On configure directement les différents serveurs de pages:

Apache:

Nginx:

IIS:

ou encore HAProxy:

Contre cela, on ne pourra pas grand chose, à part l’utilisation de CORS Anywhere ou Phantomjs (CORS: Cross Origin Resource Sharing).

Et hop, un petit truc pour ne pas rediriger le site vers un autre dont une page est insérée en IFRAME.

 

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *