将X-Frame-Options标题添加到MVC 4应用程序中的所有页面

我正在尝试添加X-Frame-Options头(将值设置为“DENY”)添加到我的MVC 4应用程序中。 我环顾四周,似乎这是为所有页面添加最干净的方式。

但是,当我添加这个代码,它不会build立。 OnResultExecuting的错误

“没有find合适的方法来覆盖”。

 public class XframeOptions : ActionFilterAttribute { public override void OnResultExecuting( System.Web.Mvc.ResultExecutingContext filterContext) { filterContext.HttpContext.Response.AddHeader( "X-Frame-Options", "DENY"); } } 

如果这是最干净的方法,我该如何解决这个错误? 在MVC 4应用程序中处理这个问题有更好的方法吗?

确保你从correct classinheritance:

 public class XframeOptions : System.Web.Mvc.ActionFilterAttribute 

在ASP.NET MVC 4中有Web API有不同的命名空间,因为你没有明确指定命名空间,我猜是编译器select错误的类:

 System.Web.Http.Filters.ActionFilterAttribute 

如果您需要每个页面,都不需要定制HttpModule或ActionFilter。 https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options详细介绍了一个更简单的解决scheme:;

要将IISconfiguration为发送X-Frame-Options标题,请添加此站点的Web.config文件:

 <system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer> 

还有另一种方法来做到这一点。 创build一个像下面这样的自定义HttpModule:

  public class XframeOptionsModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.PreSendRequestHeaders += this.OnPreSendRequestHeaders; } private void OnPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("x-frame-options", "Deny"); } } 

然后在web.config中注册这个模块

  <modules > <add name ="XframeOptions" type="your module's full type info"/> </modules> 

您遇到此错误,因为您使用错误的方法名称而不是OnResultExecuting使用OnResultExecuted 。 你应该这样写你的方法:

 public class XframeOptionsFilter : System.Web.Mvc.ActionFilterAttribute { public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext) { filterContext.HttpContext.Response.AddHeader("x-frame-options", "Deny"); } } 

NWebsec允许您通过web.config,OWIN中间件和/或MVC筛选器属性来设置此安全性标头和其他安全性标头: https : //github.com/NWebsec/NWebsec/wiki

免责声明:我是该项目的维护者。

要为所有MVC应用程序添加拒绝“x-frame-options”标题,您可以执行以下操作来避免点击劫持攻击。

 using System; using System.Web; namespace Demo.Website.Modules { public class XfoHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += ContextPreSendRequestHeaders; } public void Dispose() { } private void ContextPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Add("X-Frame-Options", "Deny"); } } } 

将以下内容添加到web.config

  <system.webServer> <modules> <add name="XfoHeader" type="Demo.Website.Modules.XfoHeaderModule" /> </modules> </system.webServer> 

在这里输入图像说明