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


46

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

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

削除したいヘッダー:

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

また、ASP.NET MVCも独自のヘッダーを送信することも知っています。これを削除する方法を知っていれば、それは役に立ちます。

  • X-AspNetMvc-Version -1.0

回答:


32

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

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

サーバーヘッダーについては、IIS6では、MicrosoftのURLScanツールを使用してリモートにできます。Port 80 Softwareは、ServerMaskと呼ばれる製品も作成します。ServerMaskは、これに加えて、さらに多くのことを行います。

IIS7の場合、カスタムモジュールを使用してサーバーヘッダーを変更する方法に関するすばらしい記事があります。

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

MvcHandler.DisableMvcResponseHeader = true;

2
回答を受け入れました。@ squillmanと回答を共有できれば幸いです。X-AspNet-Versionを修正するWeb.config:<system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
ブライアンレーバイン2009年

Xヘッダーを削除すると、これがweb.configに追加されるため、時間を節約してください。<system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </ customHeaders> </ httpProtocol> </system.webServer>
Broam 09

Broam、それは正しい答えです... IIS7の場合。問題はIIS6についてです。これはIIS6には影響しません。
アンソニー

56

多くの情報を開示するすべてのカスタムヘッダーを削除するには-IIS 7の方法は(残念ながら)異なります。

ヘッダー名: X-Powered-By

追加:

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

<system.webServer>セクション。

ヘッダー名:サーバー

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;

私は何かを正確にしたいと思います:これらのトリックのほとんどは、IIS> = 7の統合パイプラインモードでのみ機能します。クラシックモードでは、せいぜい何もしない(web.configの<remove>行)か、例外をスローします(global.asaxのResponse.Headersへの直接呼び出し、これはヘッダーを削除する別のソリューションです)。私はクラシックモードに固執しているWebサイトで作業していますが、残念ながらこれらのヘッダーを削除できませんでした。
AFract

16

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

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

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


ただし、これにより「powered by」ヘッダーが残ります。
UpTheCreek

ただし、この行コードをsystem.webWebサイトに配置すると、ダウンします。なぜなのかご存知ですか?
ネダDerakhshesh

5

私の現在のプロジェクトの「強化」サイクルをたった今、次のヘッダーを削除するための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>

2
構成によってヘッダーの生成を抑制することは、ヘッダーを生成してから削除するよりもはるかに理にかなっているようです。
-realMarkusSchmidt

1
そのリンクは現在死んでいるようです。:-(
ダニーシェーマン

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
コードパイプラインを通過しない画像とコンテンツはどうですか?
マーク・ソウル

「サーバー」に何を入れましたか?このようにすべきですか?Response.Headers.Remove( "Server:Microsoft-IIS / 7.0"); ?または、サーバーにする必要がありますか?助けてください
ネダDerakhshesh

私は「サーバー」だけを置いています。ヘッダー名が異なる場合は、別の名前で試すことができます。
ナシルマフムード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.