如果我这样创建一个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?

#1 楼

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

对标头的快速检查(在Chrome开发人员工具中显示在此处)显示了主机返回的X-Frame-Options值。



评论


使用YouTube,您可以将端点URL更改为“嵌入”版本。参见stackoverflow.com/questions/25661182/…(我知道这并不是OP严格搜索的内容,但google首先给出了此结果!)

–user4275029
16年1月27日在13:56

#2 楼

X-Frame-Options是响应请求中包含的标头,用于说明所请求的域是否将允许其自身显示在帧中。它与javascript或HTML无关,并且不能由请求的发起者更改。

此网站设置了此标头,以使其无法显示在iframe中。客户无法阻止这种行为。

进一步阅读X-Frame-Options

评论


它在响应头中设置,而不是在请求头中设置。但否则准确的解释!

–尼克
19年4月23日在8:46

@nickang就是我的意思,但是我同意这个术语不清楚。我已经对其进行了编辑,以消除任何混乱。谢谢。

–罗里·麦克罗桑(Rory McCrossan)
19年4月24日在10:25

#3 楼

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

配置Apache

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

Header always append X-Frame-Options SAMEORIGIN


配置nginx

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

add_header X-Frame-Options SAMEORIGIN;


无配置

此标头选项是可选的,因此,如果根本没有设置该选项,则可以选择将该选项配置为下一个实例(例如,访客浏览器或代理)。

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

评论


这对我有帮助。我注释掉这两行:add_header Strict-Transport-Security“ max-age = 86400; includeSubdomains”; add_header X-Frame-Options DENY;从nginx-snippets中提取,然后立即生效。

–泽斯
17-10-20在8:19

NGINX,重要的是说在哪里,内部位置?

– Peter Krauss
19年4月21日在22:47

我可以知道为Apache设置此标头的位置吗?

–帕拉维
7月25日4:38

对于Apache,在您网站的标记内添加选项,很可能是/ etc / apache2 / sites-enabled /中的配置文件。

–rubo77
7月25日7:10



#4 楼

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

必须设置这样的内容(例如来自apache的示例),这并不是最好的选择,因为它可以用于所有方面,但是在您完成之后看到服务器正常工作,就可以轻松更改设置。

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


#5 楼

并且如果没有任何帮助,并且您仍然希望在iframe中展示该网站,请考虑使用X框架绕过组件,该组件将使用代理。

#6 楼

不是真的...我用

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


评论


这看起来像一个解决方案,但这是安全漏洞吗?

–优格图
18-11-30在17:39

除非您确切知道自己在做什么,否则禁用网站的相同来源策略不是一个好主意。您不应允许与您的域不同的域嵌入内容。参见codecademy.com/articles/what-is-cors和类似的教程。

–slhck
18/12/10在14:54

#7 楼

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

有关更多信息:
https://developer.mozilla.org/zh-CN / 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");
?>


评论


这是在页面加载后使用的可行解决方案吗?初始加载后能否与页面进行交互?加载域后,是否不必代理对域的每个请求才能使用内容?

–提莫西·冈萨雷斯(Timothy Gonzalez)
16年11月10日在20:05

#8 楼

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

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

请注意,出于安全考虑,完全不建议这样做。

#9 楼

这也是一种新的浏览器安全功能,可防止网络钓鱼和其他安全威胁。对于chrome,您可以下载扩展程序以防止浏览器拒绝请求。
我在本地使用WordPress时遇到此问题。
我使用此扩展程序https://chrome.google.com/webstore / detail / ignore-x-frame-headers / gleekbfjekiniecknbkamfmkohkpodhe

#10 楼

为此,您需要匹配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>


#11 楼

您可以像这样在iframe中加载网站的网站配置中设置x-frame-option

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


评论


如果我想打开stackoverflow,在哪里可以找到Web配置?服务器端不是吗?

–irum zahra
19年7月11日在8:41

#12 楼

(我正在恢复这个答案,因为我想分享为解决此问题而创建的解决方法)
如果您无权访问要在<iframe>元素中提供服务的网页的托管网站,可以使用启用了CORS的反向代理来规避X-Frame-Options SAMEORIGIN的限制,该代理可以从Web服务器(上游)请求网页并将其提供给最终用户。
这是概念的直观图:

由于我对发现的CORS代理感到不满意,最终我自己创建了一个我称为CORSflare的应用程序:它被设计为在Cloudflare Worker(无服务器计算)中运行,因此100%免费的解决方法-只要您不需要它每天接受超过100.000个请求即可。
您可以在GitHub上找到代理源代码;完整的文档(包括安装说明)可以在我的博客的这篇文章中找到。

#13 楼

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

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

评论


如果没有答案,则“可以”然后将其发布为评论

– M.K
19年3月25日在12:13

如果事实证明是答案,该怎么办?

– Sushant Chaudhari
19年6月7日在7:12

然后,这是一个可行的建议,而不是特定的解决方案,因此应将其作为注释。

– M.K
19年6月8日在8:15

#14 楼

您可以在tomcat实例级别的配置文件(web.xml)中进行操作
,需要在web.xml配置文件中添加“过滤器”和“过滤器映射”。
这将添加[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>


#15 楼

如果您遵循xml方法,则下面的代码将起作用。

    <security:headers>
        <security:frame-options />
        <security:cache-control />
        <security:content-type-options />
        <security:xss-protection />
    </security:headers>
<security:http>