web-dev-qa-db-ja.com

IIS / ASP.NET応答ヘッダーを削除する方法

いくつかのIIS/6.0サーバーがあり、セキュリティにより、要求時にクライアントブラウザーに送信されるいくつかの応答ヘッダーを削除するように求められています。彼らは、応答ヘッダーを通じてプラットフォーム情報を漏らすことを懸念しています。 IIS Webサイトの構成(X-Powered-Byまたはそのようなヘッダー))からすべてのHTTP-HEADERSを削除しました。

(私は個人的に、この情報が隠されていても簡単に見つけられることを知っていますが、それは私の電話ではありません。)

削除するヘッダー:

  • サーバー-Microsoft-IIS/6.0
  • X-AspNet-Version-2.0.50727

また、ASP.NET MVCも独自のヘッダーを発行することを知っています。ヘッダーを削除する方法も知っている場合は、それが役立つでしょう。

  • X-AspNetMvc-Version-1.0
48
Bryan Rehbein

セキュリティ部門は、サーバーの種類を識別しにくくするためにこれを行うことを望んでいます。これにより、自動化されたハッキン​​グツールの弾幕が減り、サーバーへの侵入が困難になる可能性があります。

IIS内でWebサイトのプロパティを開き、[HTTPヘッダー]タブに移動します。ほとんどのX-ヘッダーはここで見つけて削除できます。これは、個々のサイトまたはサーバー全体に対して行うことができます(ツリー内のWebサイトオブジェクトのプロパティを変更します)。

サーバーヘッダーの場合、IIS6では、Microsoftの RLScan ツールを使用して、リモートにすることができます。 Port 80 Softwareは ServerMask と呼ばれる製品も作成します。

IIS7(およびそれ以上)の場合、 RL Rewrite Module を使用してサーバーヘッダーを書き換えるか、その値を空白にできます。 (サイト全体またはサーバー全体で)web.configで、URL書き換えモジュールがインストールされた後に次のコンテンツを追加します。

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

必要に応じて、カスタム値を書き換えアクションに追加できます。このサンプルは この記事 から提供されており、他の優れた情報も含まれています。

MVCヘッダーの場合、Global.asaxで:

MvcHandler.DisableMvcResponseHeader = true;

TechNetブログリンクが無効になったため、IIS7情報を更新するために11-12-2019を編集しました。

32
Justin Scott

あまりにも多くの情報を開示するすべてのカスタムヘッダーを削除するには-IIS 7:

ヘッダー名:X-Powered-By

追加:

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

の中に <system.webServer> セクション。

ヘッダー名:Server

PreSendRequestHeadersイベントからResponse.Headers.Remove( "Server")を呼び出して、このヘッダーを取り除くhttpModuleを実装します。このための別のリソース: IIS 7)上のASP.NET MVC Webアプリケーションのクローキング

ヘッダー名:X-AspNet-Version

Web.configのhttpRuntimeセクションで、次のように設定します。

<httpRuntime enableVersionHeader="false" />

ヘッダー名:X-AspNetMvc-Version

Global.asaxのApplication_Startイベントから-次のコードを実行します(C#):

MvcHandler.DisableMvcResponseHeader = true;
58
Adam

これをASP.NETアプリケーションのweb.configファイルに配置すると、X-AspNet-Versionヘッダーが削除されます。

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

System.webタグがファイルにすでに存在している必要があることに注意してください。複製を作成せず、httpRuntimeタグを追加するだけです。 httpRuntimeタグもすでに存在している可能性があります。その場合は、属性を追加するか、すでに存在する場合はその値を設定します。

16
squillman

現在のプロジェクトの「強化」サイクルを終えたところ- 私たちが取ったアプローチについてブログを書きました。これには、次のヘッダーを削除するためのHTTPModuleが含まれています

サーバ、
X-AspNet-Version、
X-AspNetMvc-Version、
X-Powered-By

以下に複製された関連部分:

しかし、構成を介してサーバー応答ヘッダーを削除する簡単な方法はありません。幸運なことに、IIS7にはマネージプラグ可能なモジュールインフラストラクチャがあり、その機能を簡単に拡張できます。以下は、HTTP応答ヘッダーの指定されたリストを削除するためのHttpModuleのソースです。

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

アセンブリに署名していることを確認してから、それをWebサーバーのGACにインストールし、アプリケーションのweb.configに次の変更を加えるだけです(または、グローバルに適用したい場合は、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

チェック このブログ 。コードを使用して応答ヘッダーを削除しないでください。不安定です 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>
2
mitaka

私は次のコードを使用し、私にとっては7.5 IIS

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

Web.configGlobal.asax.csの組み合わせを使用して、次のヘッダーを含むすべてのカスタムヘッダーを削除します。

  • サーバ
  • X-AspNet-Version
  • X-AspNetMvc-Version

Web.config:

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

Global.asax.cs:

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

https://stackoverflow.com/a/20739875/1678525 も参照してください

0
Jan H