拒绝显示,设置 X-Frame-Options 为 SAMEORIGIN

Refused to display, set X-Frame-Options to SAMEORIGIN

我有一个非常古老的网站,由一个与我没有联系的外部团队在 ASP.Net 2008 中构建。突然之间,一个页面似乎无法在 Chrome 和 FireFox 中正确呈现,但在其他浏览器中可以正常工作。该页面设置了 iFrame。

在 Inspect Element (Chrome) 下查看无法呈现的页面,我看到了错误

Refused to display 'http://www.example.com/somepage.html' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN, SAMEORIGIN'.

所以读了几篇文章,我可能没有完全理解这一点,但在我看来错误是,请求的域不允许自己在框架内显示。

上面的URL不是我熟悉的URL(即第三方,我无法控制)。有没有办法解决这个问题,或者这纯粹是域的所有者必须允许的?如果可以,为什么它在其他浏览器中可以工作?

Is there anyway to resolve this

不在你身边。

or is this purely the owner of the domain would have to allow?

这个

IF so why does it work in other browsers?

这里有点推测,但 SAMEORIGIN, SAMEORIGIN 不是有效值。看起来 Chrome 正在尝试错误恢复并将其视为 SAMEORIGIN

Quentin answer总结的很好

此外,如果它是您无法控制的外部站点,他们可能有充分的理由禁止框架。 (比如防止 click-jacking。)

他们可能还包含了一个 Content-Security-Policy:frame-ancestors 'self' header 会产生同样的效果。

(目前,bug in Chromium (and Chrome) causes X-Frame-Options 优先于 Content-Security-Policy 而它不应该。)

如果他们的站点通过 http(而不是 https)提供服务,并且您可以控制一个公共网络设备,您的所有用户到该站点的网络流量都必须通过该设备。我的意思是,在该设备上,如果它允许您这样做,您可以从该站点的响应中过滤掉 'undesired' headers。

当然,这是一个值得商榷的 hack。根据 'victim' 网站的使用条款,这样做甚至可能是一个法律问题。