2016-04-04 18 views
0

Ich habe eine Website, die anfällig für eine Clickjacking-Schwachstelle ist. Bei einigen Nachforschungen sieht es so aus, als ob einer der einfachen Ansätze einfach darin besteht, den Antwort-Header X-Frame-Options: SAMEORIGIN hinzuzufügen. Dies ist eine sehr alte Web-Anwendung (ca. letzte Aktualisierung war 2004), und läuft IIS 6 mit ASP.NET 2.0.Fügen Sie einen benutzerdefinierten Antwortheader zu web.config hinzu

In neueren Versionen, konnte ich einfach den folgenden Abschnitt in den

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

web.config hinzufügen, und das wäre das Ende sein. Allerdings kann ich nicht in der Lage sein zu überprüfen, dass dies mit IIS 6 möglich ist.

Ist dies mit IIS 6 und ASP.NET 2.0 nur in der Datei web.config getan werden? Wenn das so ist, wie? Wenn nicht, welche Codeänderungen müsste ich vornehmen, um das gleiche Ergebnis zu erzielen? Wäre einfach

Context.Response.AddHeader("X-Frame-Options", "SAMEORIGIN"); 

an die Global.asax#Application_EndRequest ausreichend sein?

Antwort

0

Ich glaube nicht, dass Sie dies allein durch Aktualisierung der web.config erreichen können, da Sie auf II6 ausgerichtet sind (die Unterstützung für den Abschnitt <customHeaders> wurde in IIS7 + hinzugefügt).

Was müssten Sie wahrscheinlich eine benutzerdefinierte Httpmodule ähnlich dem Ansatz in this blog post erwähnt zu schaffen, wäre zu tun, die tatsächlich behandeln würde die Header-Zugabe, die etwa wie folgt aussehen könnte:

public class SameOriginHeaderModule : IHttpModule 
{ 
    private HttpApplication _application; 

    public void Init(HttpApplication context) 
    { 
     _application = context; 
     context.PreSendRequestHeaders += OnPreSendRequestHeaders; 
    } 

    void context_EndRequest(object sender, EventArgs e) 
    { 
     // If your request exists, add the header 
     if (_application.Context != null) 
     { 
       var response = _application.Response; 
       response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); 
     } 
    } 

    public void Dispose() 
    { 

    } 
} 

Sie würden dann brauchen dieses Modul in Ihrer web.config-Datei zu registrieren, wie unten zu sehen:

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="SameOriginHeaderModule" type="SameOriginHeaderModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 
+0

gibt es einen Grund ein benutzerdefiniertes Modul zu verwenden, anstatt mein zweiten Ansatz an dem Global.asax-Datei hinzufügen? Ich mag die Idee des benutzerdefinierten Moduls, nur neugierig, ob es einen Grund gibt, einen über den anderen zu verwenden. – Zymus

+0

Eigentlich hatte ich diesen Codeschnipsel nicht bemerkt. Ja, das sollte auch ausreichen, obwohl Sie vielleicht die ['Application_PreSendRequestHeaders'' (https://msdn.microsoft.com/en-us/library/system.web.httpapplication.presendrequestheaders (v = vs. 110) .aspx) event wenn möglich, da es besser wäre, die Header hinzuzufügen. –