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
值。#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,在您网站的
–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>
评论
使用YouTube,您可以将端点URL更改为“嵌入”版本。参见stackoverflow.com/questions/25661182/…(我知道这并不是OP严格搜索的内容,但google首先给出了此结果!)
–user4275029
16年1月27日在13:56