Nachdem ich gerade den "Hardening" -Zyklus meines aktuellen Projekts durchlaufen hatte, bloggte ich über unseren Ansatz, der ein HTTPModule zum Entfernen der folgenden Header enthält :
Server,
X-AspNet-Version,
X-AspNetMvc-Version,
X-Powered-By
Passende Stücke sind unten abgebildet:
Es gibt jedoch keine einfache Möglichkeit, den Server-Antwortheader über die Konfiguration zu entfernen. Zum Glück verfügt IIS7 über eine verwaltete, steckbare Modulinfrastruktur, mit der Sie die Funktionalität problemlos erweitern können. Im Folgenden finden Sie die Quelle für ein HttpModule zum Entfernen einer angegebenen Liste von HTTP-Antwortheadern:
namespace Zen.Core.Web.CloakIIS
{
#region Using Directives
using System;
using System.Collections.Generic;
using System.Web;
#endregion
/// <summary>
/// Custom HTTP Module for Cloaking IIS7 Server Settings to allow anonymity
/// </summary>
public class CloakHttpHeaderModule : IHttpModule
{
/// <summary>
/// List of Headers to remove
/// </summary>
private List<string> headersToCloak;
/// <summary>
/// Initializes a new instance of the <see cref="CloakHttpHeaderModule"/> class.
/// </summary>
public CloakHttpHeaderModule()
{
this.headersToCloak = new List<string>
{
"Server",
"X-AspNet-Version",
"X-AspNetMvc-Version",
"X-Powered-By",
};
}
/// <summary>
/// Dispose the Custom HttpModule.
/// </summary>
public void Dispose()
{
}
/// <summary>
/// Handles the current request.
/// </summary>
/// <param name="context">
/// The HttpApplication context.
/// </param>
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
}
/// <summary>
/// Remove all headers from the HTTP Response.
/// </summary>
/// <param name="sender">
/// The object raising the event
/// </param>
/// <param name="e">
/// The event data.
/// </param>
private void OnPreSendRequestHeaders(object sender, EventArgs e)
{
this.headersToCloak.ForEach(h => HttpContext.Current.Response.Headers.Remove(h));
}
}
}
Stellen Sie sicher, dass Sie die Assembly signieren. Anschließend können Sie sie im GAC Ihrer Webserver installieren und einfach die folgende Änderung an der web.config Ihrer Anwendung vornehmen (oder, wenn Sie möchten, dass sie global angewendet wird, an der machine.config):
<configuration>
<system.webServer>
<modules>
<add name="CloakHttpHeaderModule"
type="Zen.Core.Web.CloakIIS.CloakHttpHeaderModule, Zen.Core.Web.CloakIIS,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=<YOUR TOKEN HERE>" />
</modules>
</system.webServer>
</configuration>