如何绕过X-Frame选项:SAMEORIGIN HTTP标头?

Dan*_*man 44 asp.net sharepoint http x-frame-options

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

我们试图在iframe中呈现的页面为我们提供了X-Frame-Options:SAMEORIGIN,它使浏览器(至少IE8)拒绝在帧中呈现内容.

首先,这是他们可以控制的东西,还是SharePoint默认执行的操作?如果我要求他们关闭它,他们甚至可以这样做吗?

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

Kei*_*ith 29

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

你无法做任何事情来规避它,任何有效的东西都应该在安全修补程序中快速修补.如果源内容标题在帧中不允许,则无法告诉浏览器只渲染帧.这将使会话劫持变得更容易.

如果内容是GET,那么你不会发回数据,那么你可以获得页面服务器端并代理没有标题的内容,但是任何回发都应该失效.

  • @Legends这就是我所说的_proxy内容_ :-) (2认同)

niu*_*ech 27

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

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

  1. (可选)包含内置自定义元素扩展用于Safari的polyfill:

    <script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 包括X-Frame-Bypass JS模块:

    <script type="module" src="x-frame-bypass.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 插入X-Frame-Bypass自定义元素:

    <iframe is="x-frame-bypass" src="https://example.org/"></iframe>
    
    Run Code Online (Sandbox Code Playgroud)

  • 这根本不会绕过“X-Frame-Options”选项,它只是使用代理来抓取目标页面并返回不带标题的内容。它仅适用于“GET”请求,不会获取 cookie,只能抓取第三方代理的页面(“cors.io”、“jsonp.afeld.me”、“cors-anywhere.herokuapp.com”之一) )可以访问(并且可以在其中一个网站上留下内容的副本)。由于 OP 正在询问 Sharepoint,此连接很可能是通过 VPN 进行的,并且肯定需要 cookie,这两者都不适用于未记录的第三方代理。 (9认同)
  • 这种方法现在看来被阻止了. (6认同)
  • @niutech-效果非常好。感谢您的解决方案。 (3认同)

Rob*_*Rob 8

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

如果您可以控制您的用户群(IT部门为公司应用程序),您可以尝试类似于greasemonkey脚本(如果可以的话)在所有人之间部署greasemonkey,以及b)以共享方式部署脚本)...

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


小智 6

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


ker*_*ode 5

是的,提琴手是我的选择:

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

    oSession.oResponse.headers.Remove("X-Frame-Options");
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
    
    Run Code Online (Sandbox Code Playgroud)
  4. 记住要保存脚本!