it-swarm-vi.tech

Làm thế nào để loại bỏ tiêu đề phản hồi IIS / ASP.NET

Tôi có một vài máy chủ IIS/6.0 mà bảo mật đang yêu cầu tôi xóa một vài tiêu đề phản hồi được gửi đến trình duyệt máy khách theo yêu cầu. Họ lo ngại về việc tiết lộ thông tin nền tảng thông qua các tiêu đề phản hồi. Tôi đã xóa tất cả các tiêu đề HTTP ra khỏi cấu hình IIS cho trang web (X-Powered-By hoặc một số tiêu đề như vậy).

(Cá nhân tôi biết rằng thông tin này có thể dễ dàng được tìm thấy, ngay cả khi nó bị ẩn, nhưng đó không phải là cuộc gọi của tôi.)

Tiêu đề tôi muốn xóa:

  • Máy chủ - Microsoft-IIS/6.0
  • Phiên bản X-AspNet - 2.0.50727

Tôi cũng biết rằng ASP.NET MVC cũng phát ra tiêu đề của riêng nó, nếu bạn biết cách loại bỏ nó, điều đó sẽ hữu ích.

  • Phiên bản X-AspNetMvc - 1.0
48
Bryan Rehbein

Bộ phận bảo mật của bạn muốn bạn làm điều này để làm cho loại máy chủ khó xác định hơn. Điều này có thể làm giảm bớt các rào cản của các công cụ hack tự động và khiến mọi người khó xâm nhập vào máy chủ hơn.

Trong IIS, mở các thuộc tính trang web, sau đó chuyển đến tab Tiêu đề HTTP. Hầu hết các tiêu đề X có thể được tìm thấy và loại bỏ ở đây. Điều này có thể được thực hiện cho các trang web riêng lẻ hoặc cho toàn bộ máy chủ (sửa đổi các thuộc tính cho đối tượng Trang web trong cây).

Đối với tiêu đề Máy chủ, trên IIS6, bạn có thể sử dụng công cụ RLScan của Microsoft để điều khiển từ xa. Phần mềm Cổng 80 cũng tạo ra một sản phẩm có tên ServerMask sẽ chăm sóc điều đó và hơn thế nữa cho bạn.

Đối với IIS7 (và cao hơn), bạn có thể sử dụng Mô-đun viết lại URL để viết lại tiêu đề máy chủ hoặc để trống giá trị của nó. Trong web.config (tại toàn bộ trang web hoặc máy chủ), hãy thêm nội dung này sau khi Mô-đun Viết lại URL đã được cài đặt:

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

Bạn có thể đặt một giá trị tùy chỉnh vào hành động viết lại nếu bạn muốn. Mẫu này có nguồn gốc từ bài viết này cũng có thông tin tuyệt vời khác.

Đối với tiêu đề MVC, trong Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

Đã chỉnh sửa ngày 11-12-2019 để cập nhật thông tin IIS7 do liên kết blog TechNet không còn hợp lệ.

32
Justin Scott

Để xóa tất cả các tiêu đề tùy chỉnh tiết lộ quá nhiều thông tin - các phương thức được thay đổi (không may) cho IIS 7:

Tên tiêu đề: X-Powered-By

Thêm vào:

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

bên trong <system.webServer> phần.

Tên tiêu đề: Máy chủ

Thực hiện một httpModule loại bỏ tiêu đề này bằng cách gọi Feedback.Headers.Remove ("Server") từ sự kiện PreSendRequestHeaders. Một tài nguyên khác cho việc này: Che giấu ứng dụng web ASP.NET MVC của bạn trên IIS 7

Tên tiêu đề: Phiên bản X-AspNet

Trong phần httpR.78 của web.config - set:

<httpRuntime enableVersionHeader="false" />

Tên tiêu đề: Phiên bản X-AspNetMvc

Từ sự kiện Application_Start trong global.asax - thực thi đoạn mã sau (C #):

MvcHandler.DisableMvcResponseHeader = true;
58
Adam

Đưa tệp này vào tệp web.config của ứng dụng ASP.NET sẽ thoát khỏi tiêu đề X-AspNet-Version:

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

Lưu ý rằng thẻ system.web đã tồn tại trong tệp. Không tạo một bản sao, chỉ cần thêm thẻ httpR.78. Thẻ httpR.78 cũng có thể đã tồn tại. Nếu vậy, chỉ cần thêm thuộc tính hoặc đặt giá trị của nó nếu nó đã ở đó.

16
squillman

Vừa trải qua chu trình "làm cứng" dự án hiện tại của tôi - Tôi đã viết blog về cách tiếp cận chúng tôi đã thực hiện, bao gồm HTTPModule để xóa các tiêu đề sa :

Người phục vụ,
[.__.] X-AspNet-Phiên bản,
[.__.] X-AspNetMvc-Phiên bản,
[.__.] X-Powered-By

Các mảnh quan trọng được sao chép dưới đây:

Nhưng không có cách nào dễ dàng để loại bỏ tiêu đề phản hồi của Máy chủ thông qua cấu hình. May mắn thay IIS7 có một cơ sở hạ tầng mô đun có thể cắm được quản lý cho phép bạn dễ dàng mở rộng chức năng của nó. Dưới đây là nguồn cho một HTTPModule để xóa danh sách Tiêu đề phản hồi HTTP được chỉ định:

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

Đảm bảo rằng bạn đã ký Hội đồng, sau đó bạn có thể cài đặt nó vào GAC của các máy chủ web của mình và chỉ cần thực hiện sửa đổi sau cho ứng dụng của bạn Web web.config (hoặc nếu bạn muốn nó được áp dụng trên toàn cầu, cho 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

Kiểm tra blog này . Đừng sử dụng mã để loại bỏ các tiêu đề phản hồi. Nó không ổn định theo Microsoft

Thay vào đó, hãy sử dụng phần Tiêu đề tùy chỉnh 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>
2
mitaka

Tôi sử dụng mã sau đây và làm việc cho tôi 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

Tôi sử dụng kết hợp Web.configGlobal.asax.cs để thoát khỏi tất cả các tiêu đề tùy chỉnh, bao gồm các tiêu đề sau:

  • Người phục vụ
  • Phiên bản X-AspNet
  • Phiên bản X-AspNetMvc

Web.config:

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

Toàn cầu.asax.cs:

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

Xem thêm https://stackoverflow.com/a/20739875/1678525

0
Jan H