55

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

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

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

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

4

5 回答 5

33

更新:2019-12-30

看来这个工具已经不行了![Request for update!]

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

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

  1. (可选)包含用于 Safari的具有内置扩展 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>
    
于 2014-08-30T23:03:40.717 回答
32

如果第二家公司对您在 IFrame 中访问他们的内容感到高兴,那么他们需要取消限制 - 他们可以在 IIS 配置中相当容易地做到这一点。

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

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

于 2010-06-15T12:32:41.727 回答
9

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

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

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

于 2012-05-18T18:18:16.670 回答
7

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

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

    oSession.oResponse.headers.Remove("X-Frame-Options");
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
    
  4. 记得保存脚本!
于 2016-08-16T08:31:09.707 回答
4

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

于 2014-04-04T08:43:22.440 回答