我正在开发一个网页,需要在iframe中显示由另一家公司的SharePoint服务器提供的报告。他们很好。
我们尝试在iframe中呈现的页面为我们提供了X-Frame-Options:SAMEORIGIN,它导致浏览器(至少IE8)拒绝在帧中呈现内容。
首先,这是他们可以控制的东西,还是SharePoint默认执行的操作?如果我要求他们关闭它,他们甚至可以这样做吗?
其次,我可以做些什么来告诉浏览器忽略这个http标头并只渲染帧吗?
答案 0 :(得分:26)
如果第二家公司很高兴您在IFrame中访问他们的内容,那么他们需要取消限制 - 他们可以在IIS配置中相当容易地执行此操作。
没有什么办法可以绕过它,任何有效的东西都应该在安全修补程序中快速修补。如果源内容标题在帧中不允许,则无法告诉浏览器只渲染帧。这会使会话劫持变得更容易。
如果内容是GET,那么你不会发回数据,那么你可以获得页面服务器端并代理没有标题的内容,但任何回发都应该失效。
答案 1 :(得分:22)
更新2019年:您 可以使用我的X-Frame-Bypass网络组件绕过X-Frame-Options
中的<iframe>
。它通过使用多个CORS代理扩展了IFrame元素,并在最新的Firefox和Chrome中进行了测试。
您可以按如下方式使用它:
(可选)包含Safari的Custom Elements with Built-in Extends polyfill:
<script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
包括X-Frame-Bypass JS模块:
<script type="module" src="x-frame-bypass.js"></script>
插入X-Frame-Bypass自定义元素:
<iframe is="x-frame-bypass" src="https://example.org/"></iframe>
答案 2 :(得分:8)
X-Frame-Options标头是在浏览器级别强制执行的安全功能。
如果您可以控制您的用户群(公司应用程序的IT部门),您可以尝试像greasemonkey脚本(如果可以的话)在所有人之间部署greasemonkey,以及b)以共享方式部署脚本)。
或者,您可以代理他们的结果。在您的服务器上创建一个端点,让该端点打开与目标端点的连接,并简单地向后汇集流量。
答案 3 :(得分:4)
关于第二个问题 - 您可以使用Fiddler过滤器手动将回复X-Frame-Options
标头设置为ALLOW-FROM *
之类的内容。但是,当然,这个技巧只适合你 - 其他用户仍然无法看到iframe内容(如果他们不这样做)。
答案 4 :(得分:4)
是的Fiddler是我的选择:
CustomRules.js
)。OnBeforeResponse
添加以下行:
oSession.oResponse.headers.Remove("X-Frame-Options");
oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");