Добавление заголовка X-Frame-Options ко всем страницам приложения MVC 4
Я пытаюсь добавить заголовок X-Frame-Options (со значением, установленным в "DENY" ) в мое приложение MVC 4. Я огляделся, и кажется, что это > самый чистый способ добавить для всех страниц.
Однако, когда я добавляю этот код, он не будет создан. С ошибкой OnResultExecuting
"не найдено подходящего метода для переопределения.
public class XframeOptions : ActionFilterAttribute
{
public override void OnResultExecuting(
System.Web.Mvc.ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.AddHeader(
"X-Frame-Options", "DENY");
}
}
Если это самый чистый способ сделать это, как я могу устранить эту ошибку? Есть ли лучший способ справиться с этим в приложении MVC 4?
Ответы
Ответ 1
Убедитесь, что вы наследуете correct class
:
public class XframeOptions : System.Web.Mvc.ActionFilterAttribute
В ASP.NET MVC 4 есть веб-API, у которого есть другое пространство имен, и поскольку вы явно не указали пространство имен, я думаю, что компилятор выбирает неправильный класс:
System.Web.Http.Filters.ActionFilterAttribute
Ответ 2
Нет необходимости в настраиваемом HttpModule или ActionFilter, если вам это нужно для каждой страницы. https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options детализирует гораздо более простое решение:
Чтобы настроить IIS для отправки заголовка X-Frame-Options, добавьте этот файл вашего сайта Web.config:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Ответ 3
Есть и другой способ сделать это. создайте пользовательский 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 full type info"/>
</modules>
Ответ 4
Вы получаете эту ошибку, потому что используете неправильное имя метода вместо OnResultExecuting
use 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");
}
}
Ответ 5
NWebsec позволяет вам устанавливать этот и другие заголовки безопасности через web.config, промежуточное ПО OWIN и/или атрибуты фильтра MVC: https://github.com/NWebsec/NWebsec/wiki
Отказ от ответственности: я являюсь сторонником проекта.
Ответ 6
Чтобы добавить отрицательный заголовок "x-frame-options" во все приложение MVC, вы можете сделать следующее, чтобы избежать атаки Clickjacking.
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>
![enter image description here]()