it-swarm.com.de

Hinzufügen des X-Frame-Options-Headers zu allen Seiten in der MVC 4-Anwendung

Ich versuche, den X-Frame-Options-Header (mit dem Wert "DENY") in meine MVC 4-Anwendung einzufügen. Ich habe mich umgesehen und es scheint dies ist der sauberste Weg, um für alle Seiten hinzuzufügen.

Wenn ich diesen Code hinzufüge, wird er jedoch nicht erstellt. Mit einem Fehler auf OnResultExecuting von

"Keine geeignete Methode zum Überschreiben gefunden."

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

Wenn dies der sauberste Weg ist, wie kann ich diesen Fehler beheben? Gibt es eine bessere Möglichkeit, dies in einer MVC 4-Anwendung zu handhaben?

40
Xaxum

Stellen Sie sicher, dass Sie von correct class erben:

public class XframeOptions : System.Web.Mvc.ActionFilterAttribute

In ASP.NET MVC 4 gibt es die Web-API mit einem anderen Namespace. Da Sie den Namespace nicht explizit angegeben haben, wählt der Compiler vermutlich die falsche Klasse aus:

System.Web.Http.Filters.ActionFilterAttribute
14
Darin Dimitrov

Es ist kein benutzerdefiniertes HttpModule oder ActionFilter erforderlich, wenn Sie es für jede Seite benötigen. https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options beschreibt eine viel einfachere Lösung:

Fügen Sie zum Konfigurieren von IIS zum Senden des X-Frame-Options-Headers die Datei "Web.config" Ihrer Site hinzu:

<system.webServer>
  ...

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

  ...
</system.webServer>
124
robrich

Es gibt noch einen anderen Weg, das zu tun. erstelle ein benutzerdefiniertes HttpModule wie folgt:

    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");
    }
}

dann registrieren Sie dieses Modul in web.config

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

Sie erhalten diesen Fehler, weil Sie den falschen Methodennamen anstelle von OnResultExecuting verwenden OnResultExecuted. Sie sollten Ihre Methode folgendermaßen schreiben:

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

Mit NWebsec können Sie diese und andere Sicherheitskopfzeilen über die Filterattribute web.config, OWIN Middleware und/oder MVC festlegen: https://github.com/NWebsec/NWebsec/wiki

Haftungsausschluss: Ich bin der Projektbetreuer.

1
klings

Um den Header "x-frame-options" für alle MVC-Anwendungen zu verweigern, können Sie die folgenden Schritte ausführen, um einen Clickjacking-Angriff zu vermeiden.

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");
        }
    }
}

Fügen Sie der web.config das Folgende hinzu

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

enter image description here

0
Diganta Kumar