Gibt es eine Möglichkeit, den Antwortheader "Server" aus IIS7 zu entfernen? Es gibt einige Artikel, die zeigen, dass wir mit HttpModules dasselbe erreichen können. Dies ist hilfreich, wenn wir kein Administratorrecht für den Server haben. Außerdem möchte ich keinen ISAPI-Filter schreiben.
Ich habe Administratorrechte für meinen Server. Also möchte ich die oben genannten Sachen nicht machen. Bitte helfen Sie mir, dasselbe zu tun.
Antworten:
Fügen Sie dies Ihrer global.asax.cs hinzu:
quelle
NullReferenceException
in Cassini bekommen, wenn Sie sich darauf verlassenHttpContext.Current
. Dieser Blog-Beitrag zeigt, wie Sie dies tun können, ohne die Cassini-Unterstützung zu unterbrechen, wenn dies für Sie wichtig ist.PreSendRequestHeaders
in einer Klasse zu verwenden, dieIHttpModule
oder implementiertGlobal.asax
. Ich habe gesehen, wie das Ereignis die App auf dem Server unter Stress einfrierte. DasBeginRequest
Ereignis sollte funktionieren, um Änderungen am Antwortheader vorzunehmen. Siehe hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .In IIS7 müssen Sie ein HTTP-Modul verwenden. Erstellen Sie Folgendes als Klassenbibliothek in VS:
Fügen Sie dann Folgendes zu Ihrer web.config hinzu, oder konfigurieren Sie sie in IIS (wenn Sie in IIS konfigurieren, muss sich die Assembly im GAC befinden).
quelle
HttpApplication
, dasHttpRequest
, dasHttpContext
und dasHttpResponse
nicht dernull
Fall ist und ob dies der FallHttpRequest.IsLocal
istfalse
.PreSendRequestHeaders
könnte Probleme mit HttpCacheModule verursachen , sollten Sie so etwas wie verwendenPostReleaseRequestState
statt.Wenn das URL Rewrite Module Version 2.0 für IIS (UrlRewrite) aktiviert ist, fügen Sie im Konfigurationsabschnitt
<configuration>
➡<system.webServer>
➡<rewrite>
die ausgehende Regel hinzu:quelle
rewrite
Knoten in setzensystem.webServer
. Beachten Sie, dass Ihre Site dadurch abstürzt, wenn UrlRewrite nicht auf dem Server installiert ist. Verwenden Sie zuerst die IIS-Konfigurationskonsole, um zu überprüfen, wie diese Konfigurationsknoten notiert werden.Scott Mitchell bietet in einem Blogbeitrag Lösungen zum Entfernen unnötiger Header .
Wie bereits in anderen Antworten erwähnt, gibt es für den
Server
Header die http- Modullösung oder eine web.config-Lösung für IIS 10+ , oder Sie können stattdessen URLRewrite verwenden, um sie auszublenden .Die praktischste Lösung für ein aktuelles Setup (IIS 10 +) ist die Verwendung
removeServerHeader
in der Datei web.config:Für
X-AspNet-Version
undX-AspNetMvc-Version
bietet er einen besseren Weg, als sie bei jeder Antwort zu entfernen: sie einfach überhaupt nicht zu generieren.Verwenden
enableVersionHeader
zum SperrenX-AspNet-Version
, in web.configVerwenden Sie
MvcHandler.DisableMvcResponseHeader
in Fall .Net Application_Start zum SperrenX-AspNetMvc-Version
Entfernen Sie schließlich in der IIS-Konfiguration den
X-Powered-By
benutzerdefinierten Header in web.config.Beachten Sie, dass bei ARR (Application Request Routing) auch ein eigenes ARR hinzugefügt wird
X-Powered-By
, das durch benutzerdefinierte Header-Einstellungen nicht entfernt wird. Dieser muss über den IIS-Manager, Editor-Konfiguration im IIS-Stammverzeichnis (nicht auf einer Site) entfernt werden: Gehen Sie zumsystem.webServer/proxy
Knoten und setzen SiearrResponseHeader
auffalse
. Nach einemIISReset
wird es berücksichtigt.(Ich habe diesen hier gefunden , außer dass es in diesem Beitrag um die alte IIS 6.0-Methode zum Konfigurieren von Dingen geht.)
Vergessen Sie nicht, dass die Lösung nach Anwendungscode nicht standardmäßig für Header gilt, die für statischen Inhalt generiert wurden (Sie können das aktivieren,
runAllManagedModulesForAllRequests
um dies zu ändern, aber alle Anforderungen werden ausgeführt .Net-Pipeline). Dies ist kein Problem,X-AspNetMvc-Version
da es nicht zu statischen Inhalten hinzugefügt wird (zumindest wenn statische Anforderungen nicht in der .Net-Pipeline ausgeführt werden).Randnotiz: Wenn das Ziel darin besteht, die verwendete Technologie zu verschleiern , sollten Sie auch die Standardnamen für .NET-Cookies ändern (
.ASPXAUTH
wenn die Formularauthentifizierung aktiviert ist (name
Attribut fürforms
Tag in web.config verwenden)ASP.NET_SessionId
(<sessionState cookieName="yourName" />
in web.config untersystem.web
Tag verwenden)__RequestVerificationToken
(ändern) per Code mitAntiForgeryConfig.CookieName
, gilt aber leider nicht für die versteckte Eingabe, die dieses System im HTML generiert)).quelle
Tatsächlich funktionieren die oben gezeigten codierten Module und die Global.asax-Beispiele nur für gültige Anforderungen.
Wenn Sie beispielsweise am Ende Ihrer URL <hinzufügen, wird eine Seite "Ungültige Anforderung" angezeigt, auf der der Server-Header weiterhin angezeigt wird. Viele Entwickler übersehen dies.
Die angezeigten Registrierungseinstellungen funktionieren ebenfalls nicht. URLScan ist die EINZIGE Möglichkeit, den "Server" -Header zu entfernen (zumindest in IIS 7.5).
quelle
Oder fügen Sie in web.config hinzu:
quelle
X-AspNet-Version
undX-AspNetMvc-Version
Header. Was ich weiß ist, dass dieser Weg nicht immer funktioniert (falls er jemals funktioniert). Eine zuverlässigere Methode zum Entfernen finden Sie in der Antwort von @Frederic.Mit diesem
web.config
Setup werden alle unnötigen Header aus der ASP.NET-Antwort entfernt (zumindest ab IIS 10):Bitte beachten Sie, dass dadurch alle Header für die "Anwendung" ausgeblendet werden, ebenso wie alle anderen Ansätze. Wenn Sie beispielsweise eine Standardseite oder eine Fehlerseite erreichen, die vom IIS selbst oder von ASP.NET außerhalb Ihrer Anwendung generiert wurde, gelten diese Regeln nicht. Idealerweise sollten sie sich in IIS auf der Stammebene befinden, und diese Schwelle kann einige Fehlerreaktionen auf den IIS selbst hinterlassen.
PS In IIS 10 gibt es einen Fehler , durch den manchmal der Server-Header auch bei korrekter Konfiguration angezeigt wird. Es sollte jetzt behoben sein, aber IIS / Windows muss aktualisiert werden.
quelle
Zusätzlich zur URL Rewrite-Antwort finden Sie hier das vollständige XML für
web.config
URL neu schreiben
quelle
Um den
Server:
Header zu entfernen , gehen Sie zuGlobal.asax
, suchen / erstellen Sie dasApplication_PreSendRequestHeaders
Ereignis und fügen Sie eine Zeile wie folgt hinzu (dank BK und diesem Blog wird dies auch auf dem Cassini / lokalen Entwickler nicht fehlschlagen):Wenn Sie eine vollständige Lösung zum Entfernen aller zugehörigen Header in Azure / IIS7 suchen und auch mit Cassini zusammenarbeiten möchten, lesen Sie diesen Link , der die beste Möglichkeit zum Deaktivieren dieser Header ohne Verwendung von HttpModules oder URLScan zeigt.
quelle
Wenn Sie nur den Header entfernen möchten, können Sie eine verkürzte Version der Antwort von lukiffer verwenden:
Und dann in
Web.config
:quelle
Versuchen Sie, den
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
Registrierungseintrag auf aREG_DWORD
von zu setzen1
.quelle
OnPreSendRequestHeaders
Event-Handler (siehe oben) aus irgendeinem Grund niemals ausgelöst.UrlScan kann den Server-Header auch mithilfe von
AlternateServerName=
unter entfernen[options]
.quelle
Im Anschluss an eddiegroves' Antwort , je nach Version von URLScan, können Sie stattdessen lieber
RemoveServerHeader=1
unter[options]
.Ich bin nicht sicher, in welcher Version von URLScan diese Option hinzugefügt wurde, aber sie war in Version 2.5 und höher verfügbar.
quelle
Ich habe einen Artikel gefunden, in dem erklärt wird, warum wir sowohl die Registrierung bearbeiten als auch ein Tool wie UrlScan verwenden müssen, um dies in IIS ordnungsgemäß einzurichten. Ich habe es auf unseren Servern verfolgt und es funktioniert: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Wenn Sie nur UrlScan verwenden, aber die Registrierungsänderung nicht vornehmen, gibt Ihr Server während des Stoppens des World Wide Publishing Service die http-Antwort des Servers aus der Datei HTTP.sys zurück. Außerdem finden Sie hier häufig auftretende Probleme bei der Verwendung des UrlScan-Tools: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
quelle
In IIS 10 verwenden wir eine ähnliche Lösung wie Drews Ansatz, dh:
Und fügen Sie natürlich einen Verweis auf diese DLL in Ihren Projekten und auch auf das Modul in den gewünschten Konfigurationen hinzu:
WICHTIGER HINWEIS1: Für diese Lösung ist ein Anwendungspool als integriert festgelegt.
WICHTIGER HINWEIS2: Alle Antworten in der Web-App sind davon betroffen (CSS und JS enthalten).
quelle
Ich hatte dies untersucht und die URLRewrite-Methode funktioniert gut. Ich kann die Änderung anscheinend nirgendwo gut finden. Ich habe dies mit PowerShell v2 und höher kompatibel geschrieben und unter IIS 7.5 getestet.
quelle
Sie können den folgenden Code in die Datei Global.asax.cs einfügen
quelle
Die oben vorgeschlagene Lösung in Kombination hat bei mir mit folgenden Änderungen funktioniert. Hier poste ich mein Szenario und meine Lösung.
Für mich wollte ich folgende Header entfernen:
Ich habe diese zu meiner global.asax hinzugefügt:
Das obige Ereignis wurde nicht ausgelöst, daher habe ich folgendes zu web.config hinzugefügt, dann hat es funktioniert.
und zum Entfernen des Versionsheaders habe ich auch folgendes zu web.config hinzugefügt:
Änderungen in web.config:
Ich hoffe es hilft!
quelle
Ich habe all das hier und auf mehreren anderen ähnlichen Stapelüberlauf-Threads ausprobiert.
Ich wurde für eine Weile aufgehängt, weil ich vergessen habe, meinen Browser-Cache zu leeren, nachdem ich Konfigurationsänderungen vorgenommen hatte. Wenn Sie dies nicht tun und sich die Datei in Ihrem lokalen Cache befindet, wird sie Ihnen mit den ursprünglichen Headern (duh) zurückgegeben.
Ich habe es hauptsächlich durch Entfernen der runAllManagedModulesForAllRequests zum Laufen gebracht:
Dadurch wurden die überflüssigen Header von den meisten entfernt statischen Dateien entfernt, aber ich habe immer noch den "Server" -Header für einige statische Dateien in meinem WebAPI-Projekt in swagger erhalten.
Ich habe diese Lösung endlich gefunden und angewendet und jetzt alle unerwünschten Header verschwunden:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
welches seinen Code bespricht, der hier ist:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
Dies ist ein Native-Code-Modul. Es ist in der Lage , den Server-Header zu entfernen und nicht nur den Wert auszublenden. Standardmäßig werden entfernt:
quelle
In IIS 7.5 und möglicherweise neueren Versionen ist der Kopfzeilentext gespeichert
iiscore.dll
Suchen Sie mit einem Hex-Editor die Zeichenfolge und das Wort "Server"
53 65 72 76 65 72
danach und ersetzen Sie diese durch Null-Bytes. In IIS 7.5 sieht es so aus:Im Gegensatz zu einigen anderen Methoden führt dies nicht zu einer Leistungsminderung. Der Header wird auch aus allen Anforderungen entfernt, auch aus internen Fehlern.
quelle