MVC 5阻止通过Iframe访问内容

自从从MVC4升级到MVC5,我注意到一个额外的服务器头添加到我的网页:

X-Frame-Options:SAMEORIGIN

我理解添加这个标签的安全性好处,但是其中一个页面被包含在来自其他项目(在其他域)的iframe中,这个额外的头部阻止了这个。

我已经validation它是不是主机IIS7服务器添加标题,当我降级到MVC4 – 标头不见了。

有谁知道如何从MVC5中删除这个默认值?

MVC5自动添加HTTP头X-Frame-Options与SAMEORIGIN 。 这可以防止您的网站被加载到一个iframe

但是我们可以在Global.asax.cs Application_Start中closures它。

 protected void Application_Start() { AntiForgeryConfig.SuppressXFrameOptionsHeader = true; } 

更新

我已经写了关于这个MVC5的post阻止你的网站被加载到一个IFRAME

Global.asax尝试如下所示:

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("X-Frame-Options"); } 

编辑:

看看Colin Bacon的回答 。 这比我的更正确。

简而言之,如果您不想在IFRAME中运行您的网站,请不要删除此标题,因为这会打开伪造漏洞。 但是如果你仍然想删除它 – 使用AntiForgeryConfig.SuppressXFrameOptionsHeader = true;Application_Start ,这样做更清洁。

这是HtmlHelper类的替代扩展方法。 它将首先清除所有 X-Frame-Options标题,然后添加通常由内置AntiForgeryToken方法添加的单个X-Frame-Options标题。

这种技术考虑了SuppressXFrameOptionsHeader设置,但是不利于删除所有先前添加的X-Frame-Options标题,即使是那些值不是SAMEORIGIN

 public static MvcHtmlString AntiForgeryTokenSingleHeader(this HtmlHelper html) { string token = AntiForgery.GetHtml().ToString(); HttpResponseBase httpResponse = html.ViewContext.HttpContext.Response; httpResponse.Headers.Remove("X-Frame-Options"); if (!AntiForgeryConfig.SuppressXFrameOptionsHeader) { httpResponse.AddHeader("X-Frame-Options", "SAMEORIGIN"); } return new MvcHtmlString(token); } 

如果你想要更多的灵活性,这里有一个ActionAttribute,它根据白名单添加/删除标题。 如果引用者不在白名单中,则SAMEORIGIN标题保留在原位。 我正要粘贴代码,但是我抱怨这个长度。

https://long2know.com/2016/06/asp-net-anti-forgery-xframe-options/