我正在写一个小网页,它的目的是框架其他一些页面,只是为了将它们合并到一个浏览器窗口中,以便于查看。一些页面,我试图框架禁止被框架,并抛出“拒绝显示文档,因为显示禁止X-Frame-Options.”错误在Chrome。我知道这是一个安全限制(有充分的理由),并且无法更改它。

是否有任何替代的框架或非框架方法来在单个窗口中显示页面,而不会被X-Frame-Options报头绊倒?


当前回答

我有一个类似的问题,我试图在一个iframe中显示我们自己网站的内容(作为一个带有Colorbox的lightbox样式的对话框),并且我们在源服务器上有一个服务器范围的“X-Frame-Options SAMEORIGIN”报头,防止它加载到我们的测试服务器上。

这似乎没有被记录在任何地方,但如果你可以编辑你试图iframe的页面(例如。,它们是你自己的页面),简单地发送另一个X-Frame-Options报头,任何字符串都禁用SAMEORIGIN或DENY命令。

如。对于PHP,放入

<?php
    header('X-Frame-Options: GOFORIT'); 
?>

在页面的顶部会使浏览器将两者结合起来,从而导致页眉为

X-Frame-Options SAMEORIGIN, GOFORIT

...并允许您在iframe中加载页面。当初始的SAMEORIGIN命令设置在服务器级别时,这似乎可以工作,并且您希望在逐页情况下重写它。

祝你一切顺利!

其他回答

如果你在YouTube视频中遇到这个错误,不要使用完整的url,而是使用共享选项中的嵌入url。它看起来像http://www.youtube.com/embed/eCfDxZxTBW4

您还可以更换手表吗?v= with embed/ so http://www.youtube.com/watch?v=eCfDxZxTBW4变成http://www.youtube.com/embed/eCfDxZxTBW4

我有这个问题,并解决了它编辑httd.conf

<IfModule headers_module>
    <IfVersion >= 2.4.7 >
        Header always setifempty X-Frame-Options GOFORIT
    </IfVersion>
    <IfVersion < 2.4.7 >
        Header always merge X-Frame-Options GOFORIT
    </IfVersion>
</IfModule>

我把SAMEORIGIN改成了GOFORIT 并重新启动服务器

网站所有者使用X-Frame-Options响应报头,这样他们的网站就不能在Iframe中打开。这有助于保护用户免受点击劫持攻击

如果你想在自己的机器上禁用X-Frame-Options,可以尝试几种方法。

服务器端配置

如果您拥有服务器或可以与站点所有者合作,那么您可以要求设置一个配置,以根据某些条件不发送Iframe buster响应标头。条件可以是额外的请求头或URL中的参数。

例如,站点所有者可以添加一个额外的代码,当站点打开时不发送Iframe buster报头,使用?in_debug_mode=true查询参数。

使用浏览器扩展,如Requestly删除响应头

您可以使用任何浏览器扩展,如Requestly,它允许您修改请求和响应头。这里有一个Requestly博客,解释了如何在Iframe中嵌入站点,绕过Iframe buster头。

配置一个直通代理,并从它删除标题

如果你需要为多人绕过Iframe buster报头,那么你也可以配置一个直通代理,它只删除帧buster响应报头并返回响应。然而,这是一个非常复杂的编写和设置。还有一些其他的挑战,比如通过代理在Iframe中打开的站点的身份验证等,但这种方法可以很好地用于简单的站点。

PS -我已经建立了这两个解决方案,并有第一手的经验。

FWIW:

当这个“破坏者”代码出现时,我们遇到了需要杀死iFrame的情况。因此,我使用PHP函数get_headers($url);在iFrame中显示远程URL之前检查它。为了获得更好的性能,我将结果缓存到一个文件中,这样就不会每次都建立HTTP连接。

<form target="_parent" ... />

根据Kevin Vella的想法,我尝试在PayPal的按钮生成器生成的表单元素上使用上述方法。为我工作,这样贝宝不会在一个新的浏览器窗口/标签打开。

更新

这里有一个例子:

在今天(01-19-2021)生成按钮时,PayPal自动在表单元素上包含target="_top",但如果这对您的上下文不起作用,请尝试不同的目标值。我建议_parent——至少当我使用这个PayPal按钮时,它是有效的。

有关更多信息,请参阅表单目标值。

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_parent">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="name@email.com">
  <input type="hidden" name="lc" value="US">
  <input type="hidden" name="button_subtype" value="services">
  <input type="hidden" name="no_note" value="0">
  <input type="hidden" name="currency_code" value="USD">
  <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
  <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>