pengembangan-web-mp-pd.com

Cara menghapus Header Respons IIS / ASP.NET

Saya punya beberapa server IIS/6.0 yang diminta keamanan saya untuk menghapus beberapa header respons yang dikirim ke browser klien berdasarkan permintaan. Mereka khawatir tentang mengungkapkan informasi platform melalui tajuk respons. Saya telah menghapus semua HEADER HTTP dari konfigurasi IIS untuk situs web (X-Powered-By atau header semacam itu).

(Saya pribadi tahu bahwa informasi ini dapat dengan mudah ditemukan, meskipun tersembunyi, tetapi itu bukan panggilan saya.)

Tajuk yang ingin saya hapus:

  • Server - Microsoft-IIS/6.0
  • Versi X-AspNet - 2.0.50727

Saya juga tahu bahwa ASP.NET MVC juga memancarkan tajuknya sendiri, jika Anda juga tahu cara menghapusnya, itu akan sangat membantu.

  • X-AspNetMvc-Version - 1.0
48
Bryan Rehbein

Departemen keamanan Anda ingin Anda melakukan ini untuk membuat jenis server lebih sulit untuk diidentifikasi. Ini dapat mengurangi rentetan alat peretasan otomatis dan membuatnya lebih sulit bagi orang untuk masuk ke server.

Di dalam IIS, buka properti situs web, lalu buka tab HTTP Headers. Sebagian besar header-X dapat ditemukan dan dihapus di sini. Ini dapat dilakukan untuk situs individu, atau untuk seluruh server (memodifikasi properti untuk objek Situs Web di pohon).

Untuk header Server, pada IIS6 Anda dapat menggunakan alat Microsoft RLScan untuk membuat jarak jauh dari itu. Perangkat Lunak Port 80 juga membuat produk bernama ServerMask yang akan menangani itu, dan lebih banyak lagi, untuk Anda.

Untuk IIS7 (dan lebih tinggi), Anda dapat menggunakan Modul Penulisan Ulang URL untuk menulis ulang header server atau mengosongkan nilainya. Di web.config (di situs atau server secara keseluruhan), tambahkan konten ini setelah Modul Penulisan Ulang URL telah diinstal:

<rewrite>    
  <outboundRules rewriteBeforeCache="true">
    <rule name="Remove Server header">
      <match serverVariable="RESPONSE_Server" pattern=".+" />
      <action type="Rewrite" value="" />
    </rule>
  </outboundRules>
</rewrite>

Anda dapat memasukkan nilai khusus ke dalam tindakan penulisan ulang jika Anda mau. Sampel ini bersumber dari artikel ini yang juga memiliki informasi hebat lainnya.

Untuk tajuk MVC, di Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

Diedit 11-12-2019 untuk memperbarui informasi IIS7 karena tautan blog TechNet tidak lagi valid.

32
Justin Scott

Untuk menghapus semua header kustom yang mengungkapkan terlalu banyak informasi - metodenya bervariasi (sayangnya) untuk IIS 7:

Nama Header: X-Powered-By

Menambahkan:

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

dalam <system.webServer> bagian.

Nama Header: Server

Terapkan httpModule yang menghapus header ini dengan memanggil Response.Headers.Remove ("Server") dari acara PreSendRequestHeaders. Sumber lain untuk ini: Cloaking Aplikasi Web ASP.NET MVC Anda di IIS 7

Nama Header: Versi X-AspNet

Di bagian httpRuntime web.config - set:

<httpRuntime enableVersionHeader="false" />

Nama Header: X-AspNetMvc-Version

Dari acara Application_Start di global.asax - jalankan kode berikut (C #):

MvcHandler.DisableMvcResponseHeader = true;
58
Adam

Menempatkan ini dalam file web.config aplikasi ASP.NET akan menghilangkan header X-AspNet-Version:

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

Perhatikan bahwa tag system.web seharusnya sudah ada dalam file. Jangan buat duplikat, cukup tambahkan tag httpRuntime. Tag httpRuntime mungkin juga sudah ada. Jika demikian, tambahkan saja atribut atau tetapkan nilainya jika sudah ada di sana.

16
squillman

Baru saja melalui siklus "pengerasan" pada proyek saya saat ini - saya menulis blog tentang pendekatan yang kami ambil, yang mencakup HTTPModule untuk menghapus header berikut :

Server,
Versi X-AspNet,
X-AspNetMvc-Version,
X-Didukung-Oleh

Potongan-potongan penting direproduksi di bawah ini:

Tetapi tidak ada cara mudah untuk menghapus header respons Server melalui konfigurasi. Untungnya IIS7 memiliki infrastruktur modul pluggable yang dikelola yang memungkinkan Anda untuk dengan mudah memperluas fungsinya. Di bawah ini adalah sumber untuk HttpModule untuk menghapus daftar Header Respons HTTP tertentu:

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

Pastikan bahwa Anda menandatangani Majelis, kemudian Anda dapat menginstalnya ke GAC server web Anda dan cukup membuat modifikasi berikut ke web.config aplikasi Anda (atau jika Anda ingin itu diterapkan secara global, ke 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>
5
HowardvanRooijen

Periksa blog ini . Jangan gunakan kode untuk menghapus header respons. Itu tidak stabil menurut Microsoft

Gunakan bagian Header kustom Web.config sebagai gantinya:

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

Saya menggunakan kode berikut dan berfungsi untuk saya iis 7.5

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

Saya menggunakan kombinasi Web.config dan Global.asax.cs untuk menyingkirkan semua tajuk khusus, termasuk tajuk berikut:

  • Server
  • Versi X-AspNet
  • Versi X-AspNetMvc

Web.config:

<system.web> 
  <httpRuntime enableVersionHeader="false"/> 
</system.web>
<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer> 

Global.asax.cs:

protected void Application_Start() 
{ 
    MvcHandler.DisableMvcResponseHeader = true; 
}

Lihat juga https://stackoverflow.com/a/20739875/1678525

0
Jan H