IIS / ASP.NET Yanıt Başlıkları nasıl kaldırılır


46

Güvenlikten, istemcilerde istemci tarayıcılara gönderilen birkaç yanıt başlığını kaldırmamı isteyen bir çift IIS / 6.0 sunucum var. Yanıt başlıklarını kullanarak platform bilgilerinin açıklanmasından endişe duyuyorlar. Tüm HTTP-HEADERS'ı web sitesi için IIS yapılandırmasından çıkardım (X-Powered-By ya da böyle bir başlık).

(Kişisel olarak, bu bilgilerin gizlenmiş olsa bile kolayca bulunabileceğini biliyorum, ancak benim çağrım değil.)

Başlıkları kaldırmak istiyorum:

  • Sunucu - Microsoft-IIS / 6.0
  • X-AspNet Sürümü - 2.0.50727

Ayrıca ASP.NET MVC'nin de kendi başlığını yayacağını, nasıl çıkarılacağını da biliyorsanız, bunun faydalı olacağını da biliyorum.

  • X-AspNetMvc Sürümü - 1.0

Yanıtlar:


32

Güvenlik departmanınız bunu, sunucu türünün tanımlanmasını zorlaştırmak için yapmanızı ister. Bu, otomatik hackleme araçlarının sınırlarını azaltabilir ve insanların sunucuya girmesini zorlaştırabilir.

IIS'de web sitesi özelliklerini açın, ardından HTTP Başlıkları sekmesine gidin. X-başlıklarının çoğu burada bulunabilir ve kaldırılabilir. Bu, tek tek siteler için veya tüm sunucu için yapılabilir (ağaçtaki Web Siteleri nesnesinin özelliklerini değiştirin).

Sunucu başlığı için, IIS6’da Microsoft’un URLScan aracını uzaktan kontrol etmek için kullanabilirsiniz. Port 80 Yazılımı ayrıca, bununla ilgilenecek ServerMask adında bir ürün ve sizin için daha fazlasını yapar.

IIS7 için, Sunucu başlığını değiştirmek için özel bir modül kullanma konusunda harika bir makale var.

MVC başlığı için Global.asax'ta:

MvcHandler.DisableMvcResponseHeader = true;

2
Kabul edilen cevap, cevabı @squillman ile paylaşabilmeyi diliyorum. Web.config X-AspNet-Version’i düzeltmek için: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
Bryan Rehbein

X başlığının kaldırılması bunu web.config dosyasına yerleştiriyor, bu yüzden kendinize biraz zaman kazandırın: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Broam

Broam, bu doğru cevap ... IIS7 için. Soru IIS6 ile ilgili. Bunun IIS6 üzerinde etkisi yoktur.
Anthony,

56

Çok fazla bilgi açıklayan tüm özel başlıkları kaldırmak için - IIS 7 için yöntemler değişmiştir (ne yazık ki):

Başlık Adı: X-Powered-By

Eklemek:

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

içinde <system.webServer>bölüm.

Başlık Adı: Sunucu

PreSendRequestHeaders olayından Response.Headers.Remove ("Server") öğesini çağırarak bu başlığı çıkartan bir httpModule uygulayın. Bunun için başka bir kaynak: ASP.NET MVC Web Uygulamanızı IIS 7'de gizlemek

Başlık Adı: X-AspNet-Version

Web.config dosyasının httpRuntime bölümünde - set:

<httpRuntime enableVersionHeader="false" />

Başlık Adı: X-AspNetMvc Sürümü

Global.asax içindeki Application_Start olayından - aşağıdaki kodu yürütün (C #):

MvcHandler.DisableMvcResponseHeader = true;

Sadece bir şeyi kesinleştirmek isterdim: bu numaraların çoğu, Entegre Boru Hattı modunda sadece IIS> = 7 ile çalışacaktır. Klasik Mod'da en iyi şekilde hiçbir şey yapmaz (web.config içindeki <remove> satırları) veya bir istisna alamaz (doğrudan başlık çağırır. Classic Mode'a bağlı bir web sitesinde çalışıyorum ve ne yazık ki bu başlıkları kaldıramadım.
Ekim’de

16

Bunu bir ASP.NET uygulamasının web.config dosyasına koymak X-AspNet-Version başlığından kurtulacaktır:

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

System.web etiketinin zaten dosyada olması gerektiğini unutmayın. Kopya oluşturma, yalnızca httpRuntime etiketini ekleyin. HttpRuntime etiketi de zaten mevcut olabilir. Eğer öyleyse, sadece niteliği ekleyin veya zaten varsa, değerini ayarlayın.


Ancak bu, 'powered by' başlığını bırakır.
UpTheCreek

ama bu satır kodunu system.webweb siteme koyduğumda düşüyor. neden biliyor musun?
neda Derakhshesh

5

Şu anki projemdeki "sertleşme" döngüsünü henüz geçtikten sonra - aşağıdaki başlıkları kaldırmak için bir HTTPModule içeren, uyguladığımız yaklaşım hakkında blog yazdım :

Sunucu,
X-AspNet Sürümü,
X-AspNetMvc Sürümü,
X-Powered-By

Aşağıda belirtilen çoğaltılmış parçalar:

Ancak, Sunucu yanıt başlığını yapılandırma yoluyla kaldırmanın kolay bir yolu yoktur. Neyse ki IIS7, işlevselliğini kolayca genişletebilmenizi sağlayan yönetilebilir bir takılabilir modül altyapısına sahiptir. Belirtilen bir HTTP Tepki Başlığı listesini kaldırmak için kullanılan bir HttpModule kaynağı aşağıdadır:

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

Derlemeyi imzaladığınızdan emin olun, ardından web sunucularınızın GAC'sine yükleyebilir ve uygulamanızın web.config dosyasında (veya genel olarak makinenin uygulanmasını istiyorsanız, machine.config üzerinde) aşağıdaki değişiklikleri yapabilirsiniz:

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

2
Yapılandırma ile başlıkların oluşumunu bastırmak, başlıkların oluşturulmasını sağlamaktan daha mantıklı görünüyor ve daha sonra bunları kaldırıyor.
realMarkusSchmidt

1
Görünüşe göre bu bağlantı şimdi öldü. :-(
Danny Schoemann

2

Bu blogu kontrol et . Yanıt başlıklarını kaldırmak için kod kullanmayın. Microsoft'a göre kararsız

Bunun yerine Web.config özel Başlıkları bölümünü kullanın:

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

Sorunumun çözümü buydu. win2008 R2 kullanarak (IIS 7.5)
paqogomez

1

Aşağıdaki kodu kullanıyorum ve benim için çalışıyor iis 7.5

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

3
Kod hattından geçmeyen resimleriniz ve içeriğiniz ne durumda?
Mark Sowul

"Sunucu" da ne yazdın? böyle mi olmalı? Response.Headers.Remove ("Sunucu: Microsoft-IIS / 7.0"); ? ya da Sunucu olmalı? lütfen yardım
neda Derakhshesh

Sadece "Sunucu" yu başka hiçbir şey koymadım. Eğer başlık adınız farklı ise farklı adla deneyebilirsiniz.
Nasir Mahmood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.