Jede Seite in einer MVC-Anwendung, mit der ich arbeite, legt diese HTTP-Header in Antworten fest:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Wie verhindere ich, dass diese angezeigt werden?
Jede Seite in einer MVC-Anwendung, mit der ich arbeite, legt diese HTTP-Header in Antworten fest:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Wie verhindere ich, dass diese angezeigt werden?
Antworten:
X-Powered-By
ist ein benutzerdefinierter Header in IIS. Seit IIS 7 können Sie es entfernen, indem Sie Folgendes zu Ihrem hinzufügen web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Dieser Header kann auch an Ihre Bedürfnisse angepasst werden. Weitere Informationen finden Sie unter http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Fügen Sie dies hinzu, web.config
um den X-AspNet-Version
Header zu entfernen:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Zum Entfernen X-AspNetMvc-Version
, Bearbeiten Global.asax.cs
und Hinzufügen des folgenden Application_Start
Ereignisses:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Sie können Header auch zur Laufzeit über das Application_PreSendRequestHeaders
Ereignis in ändern Global.asax.cs
. Dies ist nützlich, wenn Ihre Header-Werte dynamisch sind:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
Header dadurch nicht entfernt . Weitere Antworten dazu finden Sie in web.config
.
Sie können sie auch entfernen, indem Sie Ihrer global.asax-Datei Code hinzufügen:
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("X-Powered-By");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
HttpContext.Current.Response.Headers.Remove("Server");
}
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
Ich habe diese Konfiguration in meiner gefunden, web.config
die für eine New Web Site...
in Visual Studio erstellte Konfiguration war (im Gegensatz zu a New Project...
). Da die Frage eine ASP.NET MVC-Anwendung angibt, nicht als relevant, aber dennoch eine Option.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Update : Troy Hunt hat auch einen Artikel mit dem Titel Shhh… lassen Sie Ihre Antwortheader nicht zu laut sprechen, mit detaillierten Schritten zum Entfernen dieser Header sowie einem Link zu seinem ASafaWeb- Tool zum Scannen nach ihnen und anderen Sicherheitskonfigurationen.
code
<Sicherheit> <Anforderungsfilterung> <Verbien> <Verb hinzufügen = "OPTIONEN" erlaubt = "falsch" /> </ verbs> </ requestFiltering> </ security>code
Wie unter Verschleiern Ihrer ASP.NET MVC-Webanwendung unter IIS 7 beschrieben , können Sie den X-AspNet-Versionsheader deaktivieren, indem Sie den folgenden Konfigurationsabschnitt auf Ihre web.config anwenden:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
und entfernen Sie den Header der X-AspNetMvc-Version, indem Sie Ihre Datei Global.asax.cs wie folgt ändern:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Wie unter Benutzerdefinierte Header beschrieben Sie können den Header "X-Powered-By" entfernen, indem Sie den folgenden Konfigurationsabschnitt auf Ihre web.config anwenden:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Es gibt keine einfache Möglichkeit, den Antwortheader "Server" über die Konfiguration HttpModule
zu entfernen. Sie können jedoch einen implementieren , um bestimmte HTTP-Header zu entfernen, wie unter Verschleiern Ihrer ASP.NET MVC-Webanwendung unter IIS 7 und unter Entfernen des Servers beschrieben. x-aspnet-version-x-aspnetmvc-version-und-x-powered-by-from-the-response-header-in-iis7 .
.NET Core
Fügen Sie zum Entfernen des Server- Headers in der Datei Program.cs die folgende Option hinzu:
.UseKestrel(opt => opt.AddServerHeader = false)
Fügen Sie für Punktnetzkern 1 die Option im Aufruf von .UseKestrel () hinzu. Fügen Sie für Punktnetzkern 2 die Zeile nach UseStartup () hinzu.
Um den X-Powered-By- Header zu entfernen , bearbeiten Sie bei Bereitstellung in IIS Ihre web.config und fügen Sie den folgenden Abschnitt in das system.webServer-Tag ein:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Fügen Sie in Ihrer Datei global.asax Folgendes hinzu, um den Server- Header zu entfernen :
protected void Application_BeginRequest(object sender, EventArgs e)
{
string[] headers = { "Server", "X-AspNet-Version" };
if (!Response.HeadersWritten)
{
Response.AddOnSendingHeaders((c) =>
{
if (c != null && c.Response != null && c.Response.Headers != null)
{
foreach (string header in headers)
{
if (c.Response.Headers[header] != null)
{
c.Response.Headers.Remove(header);
}
}
}
});
}
}
Pre .NET 4.5.2
Fügen Sie Ihrem Projekt die folgende c # -Klasse hinzu:
public class RemoveServerHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() { }
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
}
}
Fügen Sie dann in Ihrer web.config den folgenden Abschnitt <Module> hinzu:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Ich hatte jedoch ein Problem, bei dem Teilprojekte dieses Modul nicht finden konnten. Kein Spaß.
Um das Tag "X-AspNetMvc-Version" für eine beliebige Version von .NET zu entfernen, ändern Sie Ihre Datei "web.config" so, dass sie Folgendes enthält:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Vielen Dank an Microsoft, dass Sie dies unglaublich schwierig gemacht haben. Oder vielleicht war das Ihre Absicht, damit Sie IIS- und MVC-Installationen auf der ganzen Welt verfolgen können ...
RemoveServerHeaderModule
sie wird nicht funktionieren in WebAPI Projekt.
Wie auf der Seite Entfernen von Standardserver-Headern auf Windows Azure-Websites gezeigt , können Sie Header folgendermaßen entfernen:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
<security>
<requestFiltering removeServerHeader="true"/>
</security>
</system.webServer>
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
</configuration>
Dadurch werden der Server-Header und die X-Header entfernt.
Dies funktionierte lokal in meinen Tests in Visual Studio 2015.
In Asp.Net Core können Sie die web.config-Dateien folgendermaßen bearbeiten:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Sie können den Server-Header in den Kestrel-Optionen entfernen:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Überprüfen Sie diesen Blog Verwenden Sie keinen Code, um Header zu entfernen. Es ist laut Microsoft instabil
Meine Meinung dazu:
<system.webServer>
<httpProtocol>
<!-- Security Hardening of HTTP response headers -->
<customHeaders>
<!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent
Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
<add name="X-Content-Type-Options" value="nosniff" />
<!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not.
By preventing a browser from framing your site you can defend against attacks like clickjacking.
Recommended value "x-frame-options: SAMEORIGIN" -->
<add name="X-Frame-Options" value="SAMEORIGIN" />
<!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that
they should only read the master crossdomain.xml file from the root of the website.
https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
<add name="X-Permitted-Cross-Domain-Policies" value="master-only" />
<!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers.
Recommended value "X-XSS-Protection: 1; mode=block". -->
<add name="X-Xss-Protection" value="1; mode=block" />
<!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites.
If you have sensitive information in your URLs, you don't want to forward to other domains
https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
<add name="Referrer-Policy" value="no-referrer-when-downgrade" />
<!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
<remove name="X-Powered-By" />
<!-- Ensure the cache-control is public, some browser won't set expiration without that -->
<add name="Cache-Control" value="public" />
</customHeaders>
</httpProtocol>
<!-- Prerequisite for the <rewrite> section
Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite -->
<rewrite>
<!-- Remove Server response headers (OWASP Security Measure) -->
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<!-- Use custom value for the Server info -->
<action type="Rewrite" value="Your Custom Value Here." />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
Der Vollständigkeit halber gibt es eine andere Möglichkeit, das zu entfernen Server
Header mithilfe von regedit .
Erstellen Sie einen DWORD-Eintrag mit dem Namen DisableServerHeader im folgenden Registrierungsschlüssel und setzen Sie den Wert auf 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
Ich würde lieber eine geeignete Lösung mit der Datei Web.config finden, aber die Verwendung <rewrite>
ist nicht gut, da das Umschreibemodul installiert werden muss, und selbst dann wird der Header nicht wirklich entfernt, sondern nur leer.
Sie können jeden Header oder irgendetwas in ändern Application_EndRequest()
dies versuchen
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Der X-Powered-By-Header wird von IIS zur HTTP-Antwort hinzugefügt, sodass Sie ihn auch auf Serverebene über IIS Manager entfernen können:
Sie können die web.config direkt verwenden:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>