Подтвердить что ты не робот

Добавление заголовка 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?

4b9b3361

Ответ 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