Scott Mitchell fornisce in un post sul blog soluzioni per rimuovere le intestazioni non necessarie .
Come già detto qui in altre risposte, per l' Server
intestazione, c'è la soluzione del modulo http , o una soluzione web.config per IIS 10+ , oppure puoi usare URLRewrite invece per cancellarlo .
La soluzione più pratica per una configurazione aggiornata (IIS 10+) è utilizzare removeServerHeader
in web.config:
<system.webServer>
...
<security>
<requestFiltering removeServerHeader="true" />
</security>
...
</system.webServer>
Per X-AspNet-Version
eX-AspNetMvc-Version
, fornisce un modo migliore rispetto a rimuoverli a ogni risposta: semplicemente non generarli affatto.
Utilizzare enableVersionHeader
per la disabilitazione X-AspNet-Version
, in web.config
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Utilizzare MvcHandler.DisableMvcResponseHeader
nell'evento .Net Application_Start per la disabilitazioneX-AspNetMvc-Version
MvcHandler.DisableMvcResponseHeader = true;
Infine, rimuovi nella configurazione IIS l' X-Powered-By
intestazione personalizzata in web.config.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Attenzione, se hai ARR (Application Request Routing), aggiungerà anche il proprio X-Powered-By
, che non verrà rimosso dalle impostazioni delle intestazioni personalizzate. Questo deve essere rimosso tramite Gestione IIS, configurazione dell'Editor sulla radice IIS (non su un sito): vai al system.webServer/proxy
nodo e imposta arrResponseHeader
su false
. Dopo un IISReset
, viene preso in considerazione.
(Ho trovato questo qui , tranne che questo post riguarda il vecchio modo IIS 6.0 di configurare le cose.)
Non dimenticare che la soluzione in base al codice dell'applicazione non si applica per impostazione predefinita all'intestazione generata sul contenuto statico (puoi attivare il runAllManagedModulesForAllRequests
per modificarlo, ma fa sì che tutte le richieste vengano eseguite .Net pipeline). Non è un problema perX-AspNetMvc-Version
poiché non viene aggiunto su contenuto statico (almeno se la richiesta statica non viene eseguita nella pipeline .Net).
Nota a margine: quando l'obiettivo è mascherare la tecnologia utilizzata, è necessario modificare anche i nomi dei cookie .Net standard ( .ASPXAUTH
se l'autenticazione dei moduli è attivata (utilizzare l' name
attributo sul forms
tag in web.config), ASP.NET_SessionId
(utilizzare <sessionState cookieName="yourName" />
in web.config sotto il system.web
tag), __RequestVerificationToken
(modificarlo per codice con AntiForgeryConfig.CookieName
, ma sfortunatamente non si applica all'input nascosto che questo sistema genera nell'html)).