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/