如何在iframe上设置'X-Frame-Options'?

问题描述 投票:121回答:13

如果我像这样创建一个iframe

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

我该如何修复错误:

拒绝在框架中显示'https://www.google.com.ua/?gws_rd=ssl',因为它将'X-Frame-Options'设置为'SAMEORIGIN'。

用JavaScript?

javascript jquery x-frame-options
13个回答
172
投票

你不能在X-Frame-Options上设置iframe。这是您请求资源的域设置的响应标头(在您的示例中为google.com.ua)。在这种情况下,他们将标头设置为SAMEORIGIN,这意味着他们不允许在域外的iframe中加载资源。有关更多信息,请参阅MDN上的The X-Frame-Options response header

快速检查标题(在Chrome开发人员工具中显示)会显示从主机返回的X-Frame-Options值。


0
投票

为此,您需要匹配apache中的位置或您正在使用的任何其他服务

如果您正在使用apache然后在httpd.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
投票

你可以在你想要加载iframe的网站的web配置中设置x-frame-option

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

0
投票

您无法在HTML正文中添加x-iframe,因为它必须由网站所有者提供,并且它位于服务器规则中。

您可以做的是创建一个PHP文件,它加载目标URL的内容和iframe的php URL,这应该可以顺利进行。


0
投票

你可以在tomcat实例级配置文件(web.xml)中执行它,需要在web.xml配置文件中添加'filter'和filter-mapping'。这将在所有页面中添加[X-frame-options = DENY],因为它是一个全局设置。

<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>

58
投票

你似乎误解了这个问题。如果请求的域将允许自己在帧内显示,则X-Frame-Options是对请求的响应中包含的头。它与javascript或HTML无关,也不能由请求的发起者更改。

本网站设置此标题以禁止它显示在iframe中。你无能为力阻止这种行为。

Further reading on X-Frame-Options


25
投票

如果您控制发送iframe内容的服务器,则可以在网络服务器中设置X-Frame-Options的设置。

Configuring Apache

要为所有页面发送X-Frame-Options标头,请将其添加到您网站的配置中:

Header always append X-Frame-Options SAMEORIGIN

Configuring nginx

要配置nginx以发送X-Frame-Options标头,请将其添加到您的http,服务器或位置配置中:

add_header X-Frame-Options SAMEORIGIN;

No configuration

此标头选项是可选的,因此如果未设置该选项,您将提供将其配置为下一个实例的选项(例如访问者浏览器或代理)

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


5
投票

不是......我用过

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

5
投票

由于服务器端没有真正提到解决方案:

一个人必须设置这样的东西(例如来自apache),这不是最佳选择,因为它允许所有内容,但在您看到服务器正常工作后,您可以轻松更改设置。

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

2
投票

X-Frame-Options HTTP响应头可用于指示是否允许浏览器在<frame><iframe><object>中呈现页面。站点可以通过确保其内容未嵌入到其他站点中来避免点击劫持攻击。

欲了解更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

我有一个替代解决方案来解决这个问题,我将通过使用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
投票

我的virtualmin服务器(apache)在子目录中的wordpress上遇到了同样的问题,上述答案都没有解决我案例中的问题,仍然在控制台上收到x-frame-options denied错误消息,直到我尝试添加下面的行到我的.htaccess(wordpress root)目录下的public_html\subdirectory\文件:

header always set x-frame-options "SAMEORIGIN"

这是我案件中唯一可行的解​​决方案。 (请注意,有一部分包含always set而不是appendalways append


1
投票

解决方案是安装浏览器插件。

发布值为X-Frame-Options(或具有不同服务器来源的DENY)的HTTP标头SAMEORIGIN的网站无法集成到IFRAME中...除非您通过安装忽略X-Frame-Options标头的浏览器插件(例如Chrome's Ignore X-Frame Headers)来更改此行为。

请注意,出于安全原因,根本不建议这样做。


1
投票

如果没有任何帮助,你仍然想在iframe中展示该网站,请考虑使用将使用代理的X Frame Bypass Component

© www.soinside.com 2019 - 2024. All rights reserved.