Cara menghapus Header Respons IIS / ASP.NET

46

Saya memiliki beberapa server IIS / 6.0 yang diminta oleh keamanan 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
  • X-AspNet-Version - 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
Bryan Rehbein
sumber

Jawaban:

32

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 masing-masing situs, atau untuk seluruh server (memodifikasi properti untuk objek Situs Web di pohon).

Untuk header Server, pada IIS6 Anda dapat menggunakan alat URLScan Microsoft untuk remote itu. Perangkat Lunak Port 80 juga membuat produk yang disebut ServerMask yang akan menangani hal itu, dan 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 info IIS7 karena tautan blog TechNet tidak lagi valid.

Justin Scott
sumber
2
Jawaban yang diterima, berharap saya bisa membagikan jawabannya dengan @squillman. Web.config untuk memperbaiki X-AspNet-Versi: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
Bryan Rehbein
Penghapusan tajuk X menempatkan ini di web.config saya, jadi hemat waktu Anda: <system.webServer> <httpProtocol> <customHeaders> <hapus nama = "X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Broam
Broam, itu jawaban yang tepat ... untuk IIS7. Pertanyaannya adalah tentang IIS6. Itu tidak berpengaruh pada IIS6.
Anthony
56

Untuk menghapus semua header khusus yang mengungkapkan terlalu banyak informasi - metode ini bervariasi (sayangnya) untuk IIS 7:

Nama Header: X-Powered-By

Menambahkan:

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

di <system.webServer>bagian ini.

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 dari 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;
Adam
sumber
Saya hanya ingin menjelaskan sesuatu: sebagian besar trik ini hanya akan bekerja dengan IIS> = 7 dalam mode Pipeline Terpadu. Dalam Mode Klasik, ia tidak akan melakukan apa-apa (<menghapus> baris di web.config) atau melemparkan pengecualian (mengarahkan panggilan ke Response.Headers di global.asax, yang merupakan solusi lain untuk menghapus header). Saya sedang mengerjakan situs web yang terjebak pada Mode Klasik dan sayangnya saya belum dapat menghapus header ini.
AFract
16

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.

squillman
sumber
Namun ini meninggalkan tajuk 'didukung oleh'.
UpTheCreek
tetapi ketika saya memasukkan kode baris ini di system.websitus web saya turun. apa kamu tahu kenapa?
neda Derakhshesh
5

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

Server,
Versi
X-AspNet , Versi X-AspNetMvc,
Didukung oleh X

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 Anda menandatangani rakitan, kemudian Anda dapat menginstalnya ke GAC server web Anda dan cukup buat modifikasi berikut ke web.config aplikasi Anda (atau jika Anda ingin 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>
HowardvanRooijen
sumber
2
Menekan generasi header dengan konfigurasi tampaknya lebih masuk akal daripada membuat header dan kemudian menghapusnya.
realMarkusSchmidt
1
Sepertinya tautan itu sudah mati. :-(
Danny Schoemann
2

Lihat 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>
mitaka
sumber
Ini adalah solusi untuk masalah saya. menggunakan win2008 R2 (IIS 7.5)
paqogomez
1

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");
}
Nasir Mahmood
sumber
3
Bagaimana dengan gambar dan konten Anda yang tidak melalui pipa kode?
Mark Sowul
apa yang Anda masukkan ke dalam "Server"? haruskah seperti ini? Response.Headers.Remove ("Server: Microsoft-IIS / 7.0"); ? atau seharusnya Server? tolong bantu
neda Derakhshesh
Saya telah menempatkan "Server" tidak lain. jika nama tajuk Anda berbeda, Anda dapat mencobanya dengan nama yang berbeda.
Nasir Mahmood