Vraag Hoe IIS / ASP.NET Response Headers te verwijderen


Ik heb een paar IIS / 6.0-servers waarvan de beveiliging me vraagt ​​om een ​​aantal antwoordheaders te verwijderen die op clientbrowsers naar verzoeken worden verzonden. Ze maken zich zorgen over het bekendmaken van platforminformatie via responsheaders. Ik heb alle HTTP-HEADERS verwijderd uit de IIS-configuratie voor de website (X-Powered-By of een dergelijke header).

(Ik weet persoonlijk dat deze informatie gemakkelijk te achterhalen is, zelfs als deze verborgen is, maar het is niet mijn oproep.)

Kopteksten die ik wil verwijderen:

  • Server - Microsoft-IIS / 6.0
  • X-ASPnet-Version - 2.0.50727

Ik weet ook dat ASP.NET MVC ook een eigen header uitzendt, als je weet hoe je het ook moet verwijderen, zou dat nuttig zijn.

  • X-AspNetMvc-Version - 1.0

45
2018-06-12 16:31


oorsprong




antwoorden:


Uw beveiligingsafdeling wil dat u dit doet om het servertype moeilijker te identificeren. Dit kan het spervuur ​​van geautomatiseerde hacktools verminderen en het voor mensen moeilijker maken om in te breken op de server.

Open binnen IIS de eigenschappen van de website en ga vervolgens naar het tabblad HTTP-headers. De meeste X-headers zijn hier te vinden en te verwijderen. Dit kan worden gedaan voor afzonderlijke sites of voor de hele server (wijzig de eigenschappen voor het object Web Sites in de structuur).

Voor de Server-header kunt u op IIS6 Microsoft's gebruiken URLScan hulpmiddel om dat op afstand te doen. Port 80 Software maakt ook een product genaamd servermask dat zorgt voor dat, en nog veel meer voor jou.

Voor IIS7 is er een geweldig artikel over het gebruik van een aangepaste module om de Server-header te wijzigen.

Voor de MVC-header, in Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

32
2018-06-12 16:37



Geaccepteerd antwoord, ik wou dat ik het antwoord kon delen met @squillman. Web.config om X-AspNet-versie te repareren: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web> - Bryan Rehbein
De X-headerverwijdering plaatst dit in mijn web.config, dus bespaar jezelf wat tijd: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </ customHeaders> </ httpProtocol> </system.webServer> - Broam
Broam, dat is het juiste antwoord ... voor IIS7. De vraag gaat over IIS6. Dat heeft geen effect op IIS6. - Anthony


Alle aangepaste headers verwijderen die te veel informatie vrijgeven - de methoden zijn (helaas) gevarieerd voor IIS 7:

Headernaam: X-Powered-by

Toevoegen:

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
  </customHeaders>
</httpProtocol>

in de <system.webServer> sectie.

Headernaam: Server

Implementeer een httpModule die deze header verwijdert door Response.Headers.Remove ("Server") te bellen vanuit de PreSendRequestHeaders -gebeurtenis. Een andere bron hiervoor: Uw ASP.NET MVC-webtoepassing cloaken op IIS 7

Headernaam: X-ASPnet-Version

In het httpRuntime gedeelte van de web.config - set:

<httpRuntime enableVersionHeader="false" />

Headernaam: X-AspNetMvc-Version

Vanaf de gebeurtenis Application_Start in global.asax - voer de volgende code uit (C #):

MvcHandler.DisableMvcResponseHeader = true;

54
2018-06-14 16:58



Ik zou alleen iets willen preciseren: de meeste van deze trucs werken alleen met IIS> = 7 in de modus Geïntegreerde pijplijn. In de Classic-modus doet het op zijn best niets (<remove> -regels in web.config) of gooit het een uitzondering (directe oproepen naar Response.Headers in global.asax, wat een andere oplossing is om headers te verwijderen). Ik werk aan een website die aan de Classic-modus is gehecht en helaas heb ik deze headers niet kunnen verwijderen. - AFract


Als u dit in een web.config-bestand van een ASP.NET-toepassing plaatst, wordt de header X-AspNet-Version verwijderd:

<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>

Merk op dat de tag system.web al in het bestand zou moeten voorkomen. Maak geen duplicaat, voeg gewoon de tag httpRuntime toe. De tag httpRuntime bestaat mogelijk ook al. Als dat zo is, voegt u gewoon het kenmerk toe of stelt u de waarde in als deze al aanwezig is.


16
2018-06-12 16:43



Dit laat echter de 'powered by' header. - UpTheCreek
maar toen ik deze lijncode in de system.web mijn website valt uit. weet u waarom? - neda Derakhshesh


Ik heb zojuist de "verhardende" cyclus van mijn huidige project doorgemaakt - Ik heb geblogd over de aanpak die we hebben gevolgd, waaronder een HTTPModule voor het verwijderen van de volgende headers:

Server,
X-ASPNET-versie,
X-AspNetMvc-versie,
X-Powered-by

Relevante stukken hieronder weergegeven:

Maar er is geen eenvoudige manier om de Server-antwoordkop via configuratie te verwijderen. Gelukkig heeft IIS7 een beheerde inplugbare module-infrastructuur waarmee je eenvoudig zijn functionaliteit kunt uitbreiden. Hieronder staat de bron voor een HttpModule voor het verwijderen van een gespecificeerde lijst van HTTP-antwoordheaders:

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));
        }
    }
}

Zorg ervoor dat u de assembly ondertekent, dan kunt u deze in de GAC van uw webservers installeren en eenvoudig de volgende wijziging aanbrengen in het web.config van uw toepassing (of als u wilt dat het wereldwijd wordt toegepast, op 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>

4
2017-08-26 08:17



Het onderdrukken van het genereren van de headers door configuratie lijkt veel zinvoller te zijn dan de headers te laten genereren en vervolgens te verwijderen. - realMarkusSchmidt
Het lijkt erop dat die link nu dood is. :-( - Danny Schoemann


Ik gebruik de volgende code en werkt voor mij in 7.5

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}

1
2017-11-19 10:22



Hoe zit het met uw afbeeldingen en inhoud die niet door de codepijplijn gaan? - Mark Sowul
wat heb je in de "server" gedaan? zou het zo moeten zijn? Response.Headers.Remove ("Server: Microsoft-IIS / 7.0"); ? of zou het Server moeten zijn? Help alstublieft - neda Derakhshesh
Ik heb gewoon "Server" niets anders geplaatst. als uw kopnaam anders is, kunt u deze met een andere naam proberen. - Nasir Mahmood


Controleren deze blog. Gebruik geen code om antwoordheaders te verwijderen. Het is onstabiel volgens Microsoft

Gebruik in plaats daarvan het aangepaste gedeelte Headers van Web.config:

<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>

0
2017-08-01 18:05