【问题标题】:How Can I Bypass the X-Frame-Options: SAMEORIGIN HTTP Header?如何绕过 X-Frame-Options: SAMEORIGIN HTTP 标头?
【发布时间】:2011-02-16 12:09:52
【问题描述】:

我正在开发一个网页,该网页需要在 iframe 中显示由另一家公司的 SharePoint 服务器提供的报表。他们对此很好。

我们试图在 iframe 中呈现的页面给了我们 X-Frame-Options: SAMEORIGIN 这会导致浏览器(至少 IE8)拒绝在框架中呈现内容。

首先,这是他们可以控制的事情,还是 SharePoint 在默认情况下所做的事情?如果我要求他们关闭此功能,他们甚至可以这样做吗?

其次,我可以做些什么来告诉浏览器忽略这个 http 标头并只渲染框架吗?

【问题讨论】:

    标签: asp.net sharepoint http x-frame-options


    【解决方案1】:

    更新:2019-12-30

    这个工具好像不行了! [Request for update!]

    2019-01-06 更新:可以使用我的 X-Frame-Bypass Web 组件在 <iframe> 中绕过 X-Frame-Options。它通过使用多个 CORS 代理来扩展 IFrame 元素,并在最新的 Firefox 和 Chrome 中进行了测试。

    您可以按如下方式使用它:

    1. (可选)为 Safari 添加 Custom Elements with Built-in Extends polyfill

      <script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
      
    2. 包含 X-Frame-Bypass JS 模块:

      <script type="module" src="x-frame-bypass.js"></script>
      
    3. 插入 X-Frame-Bypass 自定义元素:

      <iframe is="x-frame-bypass" src="https://example.org/"></iframe>
      

    【讨论】:

    • 这个方法现在好像被屏蔽了。
    • @niutech - 这工作得非常好。感谢您的解决方案。
    • @niutech 奇怪:有时它有效。有时它会失败。还不知道为什么。如果我发现了,我会在这里发帖。
    • @JeroenWiertPluimers 试试我的新 X-Frame-Bypass 自定义元素!
    • 这个根本没有绕过X-Frame-Options选项,它只是使用代理来抓取目标页面并返回没有标题的内容。它仅适用于GET 请求,不会获取 cookie,只能抓取第三方代理(cors.iojsonp.afeld.mecors-anywhere.herokuapp.com 之一)可以访问的页面(并且可能会留下内容的副本在其中一个网站上)。由于 OP 询问 Sharepoint,此连接可能通过 VPN 进行,并且肯定需要 cookie,这两者都不适用于未记录的第三方代理。
    【解决方案2】:

    如果第二家公司愿意让您在 IFrame 中访问他们的内容,那么他​​们需要取消限制 - 他们可以在 IIS 配置中相当轻松地做到这一点。

    您无法采取任何措施来规避它,任何有效的东西都应该在安全修补程序中快速修补。如果源内容标头中不允许出现在帧中,则不能告诉浏览器只渲染帧。这将使会话劫持更​​容易。

    如果内容只是 GET,您不回发数据,那么您可以获取页面服务器端并代理没有标头的内容,但是任何回发都应该失效。

    【讨论】:

    • 不允许在 iframe 中显示,但有没有办法仍然将 html 作为原始字符串获取?
    • 你应该能够抓取它并使用标记做任何你想做的事情。
    • @Legends 这就是我所说的代理内容 :-)
    • 我可能会改写 ;-)
    【解决方案3】:

    X-Frame-Options 标头是在浏览器级别强制执行的安全功能。

    如果您可以控制您的用户群(公司应用程序的 IT 部门),您可以尝试使用类似油脂的脚本(如果可以的话)a)在每个人身上部署油脂,并且 b)以共享方式部署您的脚本).. .

    或者,您可以代理他们的结果。在您的服务器上创建一个端点,并让该端点打开到目标端点的连接,然后简单地将流量向后汇集。

    【讨论】:

      【解决方案4】:

      是的,Fiddler 对我来说是一个选择:

      1. 打开 Fiddler 菜单 > 规则 > 自定义规则(这将有效地编辑 CustomRules.js)。
      2. 找到函数OnBeforeResponse
      3. 添加以下行:

        oSession.oResponse.headers.Remove("X-Frame-Options");
        oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
        
      4. 记得保存脚本!

      【讨论】:

        【解决方案5】:

        至于第二个问题 - 您可以使用 Fiddler 过滤器将响应 X-Frame-Options 标头手动设置为 ALLOW-FROM * 之类的内容。但是,当然,这个技巧只对你有用 - 其他用户仍然无法看到 iframe 内容(如果他们不这样做的话)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-01
          相关资源
          最近更新 更多