Pertanyaan Menghapus / Menyembunyikan / Menonaktifkan header respons HTTP yang berlebihan di Azure / IIS7 tanpa UrlScan


Saya harus menghapus header yang berlebihan (terutama untuk lulus uji penetrasi). Saya telah menghabiskan waktu mencari solusi yang melibatkan menjalankan UrlScan, tetapi ini tidak praktis UrlScan harus diinstal setiap kali turunan Azure dimulai.

Harus ada solusi yang bagus untuk Azure yang tidak melibatkan pemasangan dari startup.cmd.

Saya memahami bahwa header tanggapan ditambahkan tempat yang berbeda:

  • Server: ditambahkan oleh IIS.
  • X-AspNet-Version: ditambahkan oleh System.Web.dll pada saat Flush di kelas HttpResponse
  • Versi X-AspNetMvc: Ditambahkan oleh MvcHandler di System.Web.dll.
  • X-Powered-By: ditambahkan oleh IIS

Apakah ada cara untuk mengkonfigurasi (melalui web.config dll?) IIS7 untuk menghapus / menyembunyikan / menonaktifkan header respons HTTP untuk menghindari peringatan "Header Berlebihan" di asafaweb.com, tanpa membuat modul IIS atau memasang installer yang perlu dijalankan setiap kali turunan Azure dimulai?


76
2017-10-09 16:01


asal


Jawaban:


Perubahan berikut memungkinkan Anda untuk menghapus header respons HTTP ini di Azure tanpa menulis HttpModule khusus.

Sebagian besar informasi di internet sudah ketinggalan zaman, dan melibatkan UrlScan (yang sejak itu telah diintegrasikan ke dalam IIS7, tetapi dengan RemoveServerHeader=1 opsi dihapus). Di bawah ini adalah solusi rapi yang saya temukan (terima kasih blog ini, jawaban ini, dan blog ini digabungkan).

Untuk menghapus Server, buka Global.asax, temukan / buat Application_PreSendRequestHeaders acara dan tambahkan yang berikut (terima kasih BK dan blog ini ini juga tidak akan gagal pada Cassini / dev lokal):

Diedit April 2014: Anda dapat menggunakan acara PreSendRequestHeaders dan PreSendRequestContext dengan modul IIS asli, tetapi tidak menggunakannya dengan modul yang dikelola yang menerapkan IHttpModule. Mengatur properti ini dapat menyebabkan masalah permintaan asynchronous. Versi yang benar adalah menggunakan event BeginRequest.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

Untuk menghapus X-AspNet-Version, di web.config temukan / buat <system.web> dan tambahkan:

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

    ...

Untuk menghapus Versi X-AspNetMvc, buka Global.asax, temukan / buat Application_Start acara dan tambahkan baris sebagai berikut:

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

Untuk menghapus X-Powered-By, di web.config temukan / buat <system.webServer> dan tambahkan:

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

    ...

132
2017-10-09 16:01



MSDN diterbitkan artikel ini tentang cara menyembunyikan header di Azure Websites. Anda sekarang dapat menyembunyikan server dari web.config dengan menambahkan entri ke system.webServer

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

VS akan mengernyit di atas sebagai tidak valid. Tautan di atas memiliki kode sebagai foto, sulit ditemukan. Versi MVC masih tersembunyi di awal aplikasi seperti di atas, sama untuk versi x-powered-by dan .Net.


10
2018-01-11 16:39



Ada juga paket di NuGet yang membantu Anda mencapai ini melalui beberapa baris konfigurasi dan tidak ada perubahan pada kode: NWebsec. Dokumen untuk menghapus header versi dapat ditemukan di sini: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Ini didemonstrasikan di sini: http://www.nwebsec.com/HttpHeaders/VersionHeaders (di Azure)

Disclaimer: Saya adalah pengembang pada proyek.


6
2017-10-09 19:29



Menggulung jawaban sebelumnya dari @ giveme5minutes dan @AKhooli karena mereka berhubungan dengan Azure Websites ditambah beberapa item lain yang ingin dilihat oleh pemindai, ini adalah perubahan yang saya buat untuk membuat ASafaWeb senang dengan situs Azure.

Masih mengeluh tentang cookie header afinitas Azure yang tidak hanya https tetapi afinitas adalah jenis cookie yang ingin Anda putar ulang, bukan?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>

3
2018-01-24 04:07



Jawaban Nick Evans sempurna, tapi ...

Jika Anda menghapus tajuk ini untuk a keamanan tujuan, jangan lupa untuk mengubah ASP.NET Session coockie name ! Karena lebih mudah menebak bahasa yang digunakan atau versi server ketika Anda melihat ini:

enter image description here

Untuk mengubah nama cookie: (Jadilah kreatif)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>

2
2017-07-11 22:06