Hoe stel ik ‘X-Frame-Options’ in op iframe?

Als ik een iframeals volgt maak:

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

Hoe kan ik de fout oplossen:

Weigerde 'https://www.google.com.ua/?gws_rd=ssl'weer te geven in een frame omdat ‘X-Frame-Options’ was ingesteld op ‘SAMEORIGIN’.

met JavaScript?


Antwoord 1, autoriteit 100%

Je kunt X-Frame-Optionsniet instellen op het iframe. Dat is een antwoordheader die is ingesteld door het domein waarvan u de bron aanvraagt (google.com.uain uw voorbeeld). Ze hebben de header in dit geval ingesteld op SAMEORIGIN, wat betekent dat ze het laden van de bron in een iframebuiten hun domein hebben verboden. Zie voor meer informatie The X-Frame-Options responsheaderop MDN .

Een snelle inspectie van de headers (hier weergegeven in de ontwikkelaarstools van Chrome) onthult de X-Frame-Options-waarde die is geretourneerd door de host.


Antwoord 2, autoriteit 33%

X-Frame-Optionsis een header die is opgenomen in het antwoordop het verzoek om aan te geven of het aangevraagde domein zichzelf binnen een frame zal laten weergeven. Het heeft niets te maken met javascript of HTML en kan niet worden gewijzigd door de opsteller van het verzoek.

Deze website heeft deze koptekst ingesteld om deze in een iframete wissen. Er is niets dat een klant kan doen om dit gedrag te stoppen.

Verder lezen op x-frame-opties


Antwoord 3, Autoriteit 15%

Als u de bestrijding van de server hebt die de inhoud van de IFRAME verzendt, kunt u de instelling voor X-Frame-Optionsin uw webserver instellen.

Apache configureren

Voeg dit toe aan de configuratie van de configuratie van uw site:

om de x-frame-options header voor alle pagina’s te verzenden.

Header always append X-Frame-Options SAMEORIGIN

NGINX configureren

Om NGINX te configureren om de kop van de X-frame-opties te verzenden, voegt u dit toe aan uw HTTP, Server of Location Configuration:

add_header X-Frame-Options SAMEORIGIN;

Geen configuratie

Deze koptekstoptie is optioneel, dus als de optie helemaal niet is ingesteld, geeft u de optie om dit te configureren naar de volgende instantie (bijvoorbeeld de bezoekersbrowser of een proxy)

Bron: HTTPS: // Developer .mozilla.org / nl-us / docs / web / http / x-frame-opties


Antwoord 4, Autoriteit 7%

Aangezien de oplossing niet echt is vermeld voor de serverzijde:

Men moet dingen als deze instellen (bijvoorbeeld van Apache), dit is niet de beste optie omdat het alles in staat stelt, maar nadat u uw server correct hebt gewerkt, kunt u de instellingen eenvoudig wijzigen.

          Header set Access-Control-Allow-Origin "*"
           Header set X-Frame-Options "allow-from *"

Antwoord 5, autoriteit 3%

en als niets helpt en je die website toch in een iframe wilt presenteren, overweeg dan om X Frame Bypass te gebruiken Componentdie een proxy zal gebruiken.


Antwoord 6, autoriteit 2%

niet echt… Ik gebruikte

<system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>

Antwoord 7

De X-Frame-Options HTTP-responsheader kan worden gebruikt om aan te geven of een browser toestemming moet krijgen om een pagina in een <frame>, <iframe>of <object>. Sites kunnen dit gebruiken om clickjacking-aanvallen te voorkomen door ervoor te zorgen dat hun inhoud niet wordt ingesloten in andere sites.

Voor meer informatie:
https://developer.mozilla.org/ nl-NL/docs/Web/HTTP/Headers/X-Frame-Options

Ik heb een alternatieve oplossing voor dit probleem, die ik ga demonstreren met behulp van 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");
?>

Antwoord 8

De oplossing is om een browser-plug-in te installeren.

Een website die HTTP-header X-Frame-Optionsuitgeeft met een waarde van DENY(of SAMEORIGINmet een andere serveroorsprong) kan niet worden geïntegreerd in een IFRAME… tenzij u dit gedrag wijzigt door een browserplug-in te installeren die de X-Frame-Options-header negeert (bijv. Chrome negeert X-Frame-headers).

Houd er rekening mee dat dit om veiligheidsredenen helemaal niet wordt aanbevolen.


Antwoord 9

(Ik breng dit antwoord weer tot leven omdat ik de tijdelijke oplossing wil delen die ik heb gemaakt om dit probleem op te lossen)

Als u geen toegang heeft tot de website die de webpagina host die u wilt weergeven in het <iframe>-element, kunt u de X-Frame-OptionsSAMEORIGIN-beperkingen door een omgekeerde proxy met CORS te gebruiken die de webpagina(‘s) van de webserver (upstream) kan opvragen en aan de eindgebruiker kan aanbieden.

Hier is een visueel diagram van het concept:

Omdat ik niet tevreden was met de CORS-proxy’s die ik vond, heb ik er uiteindelijk zelf een gemaakt, die ik CORSflarenoemde: het is ontworpen om te draaien in een Cloudflare Worker(serverless computing), daarom is het een 100% gratis tijdelijke oplossing – zolang u dat niet doet nodig hebben om meer dan 100.000 verzoeken per dag te accepteren.

Je kunt de proxybroncode vinden op GitHub; de volledige documentatie, inclusief de installatie-instructies, is te vinden in dit berichtvan mijn blog.


Antwoord 10

Hiervoor moet je overeenkomen met de locatie in je apache of een andere service die je gebruikt

Als je apache gebruikt, dan in het httpd.conf-bestand.

 <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>

Antwoord 11

je kunt de x-frame-optie in de webconfiguratie van de site die je in iframe wilt laden zo instellen

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>

Antwoord 12

Dit is ook een nieuwe beveiligingsfunctie van de browser om phishing en andere beveiligingsrisico’s te voorkomen. Voor chrome kun je een extensie downloaden om te voorkomen dat de browser het verzoek weigert.
Ik kwam dit probleem tegen toen ik lokaal aan WordPress werkte.

Ik gebruik deze extensie https://chrome.google .com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe


Antwoord 13

Je kunt het x-iframe niet echt in je HTML-body toevoegen, omdat het door de site-eigenaar moet worden geleverd en het binnen de serverregels valt.

Wat u waarschijnlijk kunt doen, is een PHP-bestand maken dat de inhoud van de doel-URL laadt en die php-URL iframen, dit zou soepel moeten werken.


Antwoord 14

u kunt dit doen in het configuratiebestand op instantieniveau van Tomcat (web.xml)
moet u de ‘filter’ en filter-mapping’ toevoegen aan het web.xml-configuratiebestand.
dit zal de [X-frame-options = DENY] aan de hele pagina toevoegen omdat het een globale instelling is.

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
          <param-name>antiClickJackingEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>antiClickJackingOption</param-name>
          <param-value>DENY</param-value>
        </init-param>
    </filter>
  <filter-mapping> 
    <filter-name>httpHeaderSecurity</filter-name> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

Other episodes