Comment définir 'X-Frame-Options' sur iframe?

Si je crée un iframe comme ceci:

var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({

Comment puis-je corriger l'erreur:

A refusé d'afficher 'https://www.google.com.ua/?gws_rd=ssl' dans un cadre car il a défini 'X-Frame-Options' sur 'SAMEORIGIN'.

Avec JavaScript?

95
demandé sur Drew Gaynor 2014-12-08 16:20:44

9 réponses

Vous ne pouvez pas définir X-Frame-Options sur le iframe. C'est un en-tête de réponse défini par le domaine à partir duquel vous demandez la ressource (google.com.ua dans votre exemple). Ils ont défini l'en-tête sur SAMEORIGIN dans ce cas, ce qui signifie qu'ils ont interdit le chargement de la ressource dans un iframe en dehors de leur domaine. Pour plus d'informations, consultez l'en-tête de réponse X-Frame-Options sur MDN.

Une inspection rapide des en-têtes (présentés ici dans les outils de développement Chrome) révèle la valeur X-Frame-Options renvoyée à partir de l'hôte.

entrez la description de l'image ici

137
répondu Drew Gaynor 2014-12-08 13:35:43

Vous semblez mal comprendre le problème. X-Frame-Options est un en-tête renvoyé avec la demande d'indiquer si le domaine demandé se permettra d'être affiché dans un cadre. Cela n'a rien à voir avec javascript ou HTML, et ne peut pas être modifié par l'auteur de la requête.

Ce site Web a défini cet en-tête pour interdire son affichage dans un iframe. Il n'y a rien que vous puissiez faire pour arrêter ce comportement.

Pour en savoir plus sur X-Frame-Options

51
répondu Rory McCrossan 2014-12-08 13:24:07

Si vous contrôlez le serveur qui envoie le contenu de l'iframe, vous pouvez définir le paramètre X-Frame-Options dans votre serveur web.

Configuration D'Apache

Pour envoyer L'en-tête X-Frame-Options pour toutes les pages, ajoutez ceci à la configuration de votre site:

Header always append X-Frame-Options SAMEORIGIN

Configuration de nginx

Pour configurer nginx pour envoyer L'en-tête X-Frame-Options, ajoutez ceci à votre configuration http, serveur ou emplacement:

add_header X-Frame-Options SAMEORIGIN;

Aucune configuration

Cette option d'en-tête est facultatif, donc si l'option n'est pas définie du tout, vous donnerez l'option de configurer cela à l'instance suivante (par exemple, le navigateur des visiteurs ou un proxy)

source: https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

22
répondu rubo77 2016-05-17 06:04:36

Pas vraiment... J'ai utilisé

 <system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>
3
répondu LongChalk 2018-02-07 12:40:34

L'en - tête de réponse HTTP X-Frame-Options peut être utilisé pour indiquer si un navigateur doit être autorisé à rendre une page dans un <frame>, <iframe> ou <object>. Les Sites peuvent l'utiliser pour éviter les attaques de clickjacking, en veillant à ce que leur contenu ne soit pas intégré à d'autres sites.

Pour Plus D'Informations: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

J'ai une solution alternative pour ce problème, que je vais démontrer en utilisant PHP:

Iframe.php:

<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>

Target_url.php:

<?php 
  echo file_get_contents("http://www.example.com");
?>
2
répondu Shailesh Dwivedi 2017-10-21 15:01:43

La solution consiste à installer un plugin de navigateur.

Un site web qui émet un en-tête HTTP X-Frame-Options avec une valeur de DENY (ou SAMEORIGIN avec une origine de serveur différente) ne peut pas être intégré dans un IFRAME... sauf si vous modifiez ce comportement en installant un plugin de navigateur qui ignore l'en-tête X-Frame-Options (par exemple Chrome Ignore les en-têtes X-Frame).

Notez que cela n'est pas recommandé du tout pour des raisons de sécurité.

1
répondu Julien Kronegg 2017-05-03 21:26:56

À cette fin, vous devez faire correspondre l'emplacement dans votre apache ou tout autre service que vous utilisez

Si vous utilisez apache alors dans httpd.fichier conf.

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>
0
répondu Ibtesam Latif 2015-11-18 10:51:44

Vous pouvez définir l'option X-frame-dans la configuration web du site que vous souhaitez charger dans iframe comme ceci

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>
0
répondu Nikki 2017-11-07 06:06:27

J'ai eu le même problème sur mon serveur virtualmin (apache) pour wordpress dans un sous-répertoire et aucune des réponses ci-dessus ne pouvait résoudre le problème sur mon cas et obtenait toujours le message d'erreur X-frame-options refusé sur la console, jusqu'à ce que j'ai essayé d'ajouter la ligne ci-dessous au fichier .htaccess placé]}

header always set x-frame-options "SAMEORIGIN"

Et c'était la seule solution de travail dans mon cas. (à noter qu'il y a une partie contenant always set plutôt que append ou always append)

0
répondu Mojtaba Rezaeian 2018-03-21 07:48:02