วิธีลบ IIS / ASP.NET Response Headers


46

ฉันมีเซิร์ฟเวอร์ IIS / 6.0 สองตัวที่ความปลอดภัยขอให้ฉันลบส่วนหัวการตอบกลับสองสามข้อที่ส่งไปยังเบราว์เซอร์ไคลเอ็นต์ตามคำขอ พวกเขากังวลเกี่ยวกับการเปิดเผยข้อมูลแพลตฟอร์มผ่านส่วนหัวการตอบกลับ ฉันได้ลบ HTTP-HEADERS ทั้งหมดออกจากการกำหนดค่า IIS สำหรับเว็บไซต์ (X-Powered-By หรือส่วนหัวดังกล่าวบางส่วน)

(โดยส่วนตัวแล้วฉันรู้ว่าข้อมูลนี้สามารถค้นพบได้ง่ายแม้ว่าจะถูกซ่อนอยู่ แต่ไม่ใช่สายของฉัน)

ส่วนหัวที่ฉันต้องการลบ:

  • เซิร์ฟเวอร์ - Microsoft-IIS / 6.0
  • X-AspNet-Version - 2.0.50727

ฉันรู้ด้วยเช่นกันว่า ASP.NET MVC ก็ปล่อยส่วนหัวของตัวเองเช่นกันถ้าคุณรู้วิธีที่จะลบมันก็จะเป็นประโยชน์

  • X-AspNetMvc-Version - 1.0

คำตอบ:


32

แผนกความปลอดภัยของคุณต้องการให้คุณทำเช่นนี้เพื่อให้เซิร์ฟเวอร์พิมพ์ได้ยากขึ้น สิ่งนี้อาจช่วยลดการแฮ็คเครื่องมือแฮ็คอัตโนมัติและทำให้ผู้คนบุกเข้าไปในเซิร์ฟเวอร์ได้ยากขึ้น

ภายใน IIS ให้เปิดคุณสมบัติของเว็บไซต์จากนั้นไปที่แท็บ HTTP Headers ส่วนหัว X- ส่วนใหญ่สามารถพบและลบได้ที่นี่ สิ่งนี้สามารถทำได้สำหรับแต่ละไซต์หรือสำหรับเซิร์ฟเวอร์ทั้งหมด (แก้ไขคุณสมบัติสำหรับวัตถุเว็บไซต์ในแผนผัง)

สำหรับส่วนหัวของเซิร์ฟเวอร์บน IIS6 คุณสามารถใช้เครื่องมือURLScanของ Microsoft เพื่อรีโมทได้ ซอฟต์แวร์พอร์ต 80 ยังสร้างผลิตภัณฑ์ที่เรียกว่าServerMaskซึ่งจะดูแลสิ่งนั้นและอื่น ๆ อีกมากมายสำหรับคุณ

สำหรับ IIS7 มีบทความที่ดีเกี่ยวกับการใช้โมดูลที่กำหนดเองเพื่อปรับเปลี่ยนส่วนหัวของเซิร์ฟเวอร์

สำหรับส่วนหัว MVC ใน Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

2
ยอมรับคำตอบแล้วฉันต้องการแบ่งปันคำตอบกับ @squillman Web.config เพื่อแก้ไข X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
Bryan Rehbein

การเอาส่วนหัว X ออกวางไว้ใน web.config ของฉันดังนั้นช่วยตัวเองบ้าง: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Broam

นั่นเป็นคำตอบที่ถูกต้อง ... สำหรับ IIS7 คำถามเกี่ยวกับ IIS6 ที่ไม่มีผลกับ IIS6
แอนโทนี่

56

หากต้องการลบส่วนหัวที่กำหนดเองทั้งหมดที่เปิดเผยข้อมูลมากเกินไป - วิธีการนั้นหลากหลาย (น่าเสียดาย) สำหรับ IIS 7:

ชื่อส่วนหัว: X-Powered-By

เพิ่ม:

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

ใน<system.webServer>ส่วน

ชื่อส่วนหัว: เซิร์ฟเวอร์

ใช้ httpModule ที่ดึงส่วนหัวนี้ออกโดยเรียก Response.Headers.Remove ("Server") จากเหตุการณ์ PreSendRequestHeaders แหล่งข้อมูลอื่นสำหรับสิ่งนี้: การปิดแอปพลิเคชัน ASP.NET MVC เว็บของคุณบน IIS 7

ชื่อส่วนหัว: X-AspNet-Version

ในส่วน httpRuntime ของ web.config - set:

<httpRuntime enableVersionHeader="false" />

ชื่อส่วนหัว: X-AspNetMvc-Version

จากเหตุการณ์ Application_Start ใน global.asax - รันโค้ดต่อไปนี้ (C #):

MvcHandler.DisableMvcResponseHeader = true;

ฉันแค่ต้องการที่จะแม่นยำบางอย่าง: เทคนิคเหล่านี้ส่วนใหญ่จะทำงานกับ IIS> = 7 ในโหมด Integrated Pipeline ในโหมดคลาสสิกจะเป็นการดีที่สุดที่จะไม่ทำอะไรเลย (<remove> บรรทัดใน web.config) หรือส่งการยกเว้น ฉันกำลังทำงานบนเว็บไซต์ที่ติดอยู่กับโหมดคลาสสิกและน่าเสียดายที่ฉันไม่สามารถลบส่วนหัวเหล่านี้ได้
หยุด

16

การนำสิ่งนี้ไปใช้ในไฟล์ web.config ของแอปพลิเคชัน ASP.NET จะกำจัดส่วนหัว X-AspNet-Version:

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

โปรดทราบว่าแท็ก system.web ควรมีอยู่แล้วในไฟล์ อย่าสร้างรายการซ้ำเพียงเพิ่มแท็ก httpRuntime แท็ก httpRuntime อาจมีอยู่แล้ว ถ้าเป็นเช่นนั้นเพียงเพิ่มแอตทริบิวต์หรือตั้งค่าถ้ามันมีอยู่แล้ว


อย่างไรก็ตามสิ่งนี้ทำให้ส่วนหัว 'ขับเคลื่อนโดย'
UpTheCreek

แต่เมื่อฉันใส่รหัสบรรทัดนี้ในsystem.webเว็บไซต์ของฉันลงไป คุณรู้ไหมว่าทำไม?
neda Derakhshesh

5

เพิ่งผ่านวงจร "การทำให้แข็ง" ในโครงการปัจจุบันของฉัน - ฉันบล็อกเกี่ยวกับวิธีการที่เราใช้ซึ่งรวมถึง HTTPModule สำหรับการลบส่วนหัวต่อไปนี้ :

เซิร์ฟเวอร์,
X-AspNet-Version,
X-AspNetMvc-Version,
X-Powered-By

ชิ้นส่วนที่เกี่ยวข้องทำซ้ำด้านล่าง:

แต่ไม่มีวิธีง่ายๆในการลบส่วนหัวการตอบกลับเซิร์ฟเวอร์ผ่านการกำหนดค่า โชคดีที่ IIS7 มีโครงสร้างพื้นฐานโมดูลที่เสียบได้ซึ่งได้รับการจัดการซึ่งช่วยให้คุณสามารถขยายการทำงานได้อย่างง่ายดาย ด้านล่างนี้เป็นแหล่งข้อมูลสำหรับ HttpModule สำหรับการลบรายการของ HTTP Response Headers ที่ระบุ:

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

ตรวจสอบให้แน่ใจว่าคุณได้ลงนามในชุดประกอบจากนั้นคุณสามารถติดตั้งลงใน GAC ของเว็บเซิร์ฟเวอร์ของคุณและทำการปรับเปลี่ยนต่อไปนี้เพื่อ web.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>

2
การยับยั้งการสร้างส่วนหัวโดยการกำหนดค่าดูเหมือนจะสมเหตุสมผลมากกว่าการสร้างส่วนหัวแล้วเอาออก
realMarkusSchmidt

1
ดูเหมือนว่าลิงก์นี้จะตายไปแล้ว :-(
Danny Schoemann

2

ตรวจสอบบล็อกนี้ อย่าใช้รหัสเพื่อลบส่วนหัวการตอบกลับ มันไม่เสถียรตามMicrosoft

ใช้ส่วนหัวที่กำหนดเอง 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>

นี่เป็นวิธีแก้ปัญหาของฉัน ใช้ win2008 R2 (IIS 7.5)
paqogomez

1

ฉันใช้รหัสต่อไปนี้และใช้งานได้กับฉัน iis 7.5

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

3
รูปภาพและเนื้อหาของคุณที่ไม่ผ่านขั้นตอนการโค้ด
Mark Sowul

คุณใส่อะไรลงใน "เซิร์ฟเวอร์" มันควรจะเป็นแบบนี้? Response.Headers.Remove ("เซิร์ฟเวอร์: Microsoft-IIS / 7.0"); ? หรือควรเป็นเซิร์ฟเวอร์ โปรดช่วยด้วย
neda Derakhshesh

ฉันใส่แค่ "เซิร์ฟเวอร์" ไม่มีอะไรอื่น หากชื่อส่วนหัวของคุณแตกต่างกันคุณสามารถลองด้วยชื่ออื่น
Nasir Mahmood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.