我花了几天(对我来说真的很多时间)来解决这个问题,但最后我找到了一些解决方法。
老实说,我已经阅读了很多关于 x-frame-problem 及其属性(Deny、SameOrigin、AllowsAll、AllowsFor 等)的文章,但我还没有找到任何可靠的解决方案来解决此类问题。当然,我确实理解点击劫持和跨站点问题的问题,但是,我知道我的提议并不完全正确和安全,因为它从请求中删除了标头的值。
就是这样,在 Global.asax.cs 中:
namespace xxxx
{
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
private void Application_EndRequest(object sender, EventArgs e)
{
Response.Headers["X-FRAME-OPTIONS"] = string.Empty;
}
}
}
总结一下,我不得不承认几件事:
Chrome 浏览器不支持 AllowFor 属性,AllowAll 也不支持。它只理解 Deny 和 SameOrigin 属性,而 Internet Explorer 处理 AllowAll 属性。FireFox 的行为类似于 Chrome。
IIS 或 Windows Azure 主机也会自动将此标头添加到具有 SameOrigin 属性的响应中。(与 Somme.com 主机相同)。
在像我这样的情况下(以及我注意到的其他人 http://www.windows-azure.net/x-frame-options-header-is-not-changed-in-azure-web-role/)唯一的解决方案是从 x-frame-options 标头中辞职。尽管在我看来,网络浏览器至少应该支持 AllowFor 属性来克服这样的问题。
谢谢和最好的问候!
格热戈日