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


46

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 đã loại bỏ tất cả các HTTP-Header 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

Câu trả lời:


32

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ở 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ụ URLScan của Microsoft để điều khiển từ xa. Phần mềm Port 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, có một bài viết tuyệt vời về việc sử dụng một mô-đun tùy chỉnh để sửa đổi tiêu đề Máy chủ.

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

MvcHandler.DisableMvcResponseHeader = true;

2
Chấp nhận câu trả lời, ước gì tôi có thể chia sẻ câu trả lời với @squillman. Web.config để sửa lỗi X-AspNet-Phiên bản: <system.web> <httpR.78 enableVersionHeader = "false" /> </system.web>
Bryan Rehbein

Việc xóa tiêu đề X đặt điều này vào web.config của tôi, vì vậy hãy tiết kiệm thời gian cho bản thân: <system.webServer> <httpProtatio> <customHeaders> <remove name = "X-Powered-By" /> </ customHeaders> </ httpProtatio> </system.webServer>
Broam

Broam, đó là câu trả lời đúng ... cho IIS7. Câu hỏi là về IIS6. Điều đó không có hiệu lực trên IIS6.
Anthony

56

Để 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>

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 đề: X-AspNet-Phiên bản

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

<httpRuntime enableVersionHeader="false" />

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

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

MvcHandler.DisableMvcResponseHeader = true;

Tôi chỉ muốn chính xác một cái gì đó: hầu hết các thủ thuật này sẽ chỉ hoạt động với IIS> = 7 trong chế độ Đường ống tích hợp. Trong Chế độ cổ điển, tốt nhất là không làm gì (<remove> dòng trong web.config) hoặc ném ngoại lệ (gọi trực tiếp tới Phản hồi. Người đọc trong global.asax, đây là một giải pháp khác để xóa tiêu đề). Tôi đang làm việc trên một trang web bị kẹt ở Chế độ cổ điển và thật không may là tôi không thể xóa các tiêu đề này.
Thu hút

16

Đư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ó đã ở đó.


Tuy nhiên, điều này để lại tiêu đề 'được cung cấp bởi'.
UpTheCux

nhưng khi tôi đặt mã dòng này trong system.webtrang web của tôi bị hỏng. bạn có biết tại sao?
neda Derakhshesh

5

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 đề sau :

Máy chủ,
Phiên bản
X-AspNet , Phiên bản X-AspNetMvc,
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ợp đồ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 web.config của ứng dụng của bạn (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>

2
Ức chế việc tạo các tiêu đề bằng cấu hình dường như có ý nghĩa hơn nhiều so với việc tạo các tiêu đề và sau đó loại bỏ nó.
realMarkusSchmidt

1
Có vẻ như liên kết đó bây giờ đã chết. :-(
Daniel Schoemann

2

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>

Đây là giải pháp cho vấn đề của tôi. sử dụng win2008 R2 (IIS 7.5)
paqogomez

1

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

3
Điều gì về hình ảnh và nội dung của bạn không đi qua đường dẫn mã?
Mark Sowul

Bạn đã đặt gì vào "Máy chủ"? nó có nên như thế này không? Phản hồi.Headers.Remove ("Máy chủ: Microsoft-IIS / 7.0"); ? hoặc nó phải là máy chủ? xin vui lòng giúp đỡ
neda Derakhshesh

Tôi chỉ đặt "Máy chủ" không có gì khác. nếu tên tiêu đề của bạn khác nhau, bạn có thể thử nó với tên khác.
Nasir Mahmood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.