ASP.Net MVCのデフォルトのHTTPヘッダーを削除する方法


176

私が使用しているMVCアプリケーションの各ページは、応答に次のHTTPヘッダーを設定します。

X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0

これらが表示されないようにするにはどうすればよいですか?


2
IISとASP.NETで不要なHTTPヘッダーを削除するこの記事を確認してください。リストされているすべてのヘッダーを削除する方法が説明されています。
Pavel Morshenyuk 2010

@PavelMorshenyukすみません、サーバー名を削除する方法も見つけましたか?承認された回答ではサーバーは削除されません
neda Derakhshesh

回答:


285

X-Powered-ByIISのカスタムヘッダーです。IIS 7以降、次のものをに追加することで削除できますweb.config

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

このヘッダーは、必要に応じて変更することもできます。詳細については、http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeadersを参照してください。


これを追加しweb.configX-AspNet-Versionヘッダーを取り除きます:

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

最後に、を削除するX-AspNetMvc-VersionGlobal.asax.csは、Application_Startイベントで以下を編集して追加します。

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

Application_PreSendRequestHeadersイベントを使用して、実行時にヘッダーを変更することもできますGlobal.asax.cs。これは、ヘッダー値が動的な場合に役立ちます。

protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
      Response.Headers.Remove("foo");
      Response.Headers.Add("bar", "quux");
}

4
+1-利益のために、1)なぜあなたはどうしますか?2)悪影響はありますか?
BritishDeveloper 2010

69
これは、セキュリティ上の理由から、Webページの生成に使用するテクノロジーを難読化するために行います。これにより、ハッカーは少し一生懸命働くことになります。
RedFilter

20
@BritishDeveloperこれはセキュリティレビューから出された推奨事項でした。ハッカーがそのプラットフォームで特定の脆弱性を狙うのに役立つので、テクノロジースタックを宣伝しないことがベストプラクティスだと思います。
ポールフライヤー

1
@RedFilter迅速かつ詳細な回答をありがとうございます!
ポールフライヤー2010

6
IIS 8では、X-Powered-Byヘッダーは削除されません。これを達成する方法については、他の回答を参照してくださいweb.config
Knelis

105

global.asaxファイルにコードを追加して削除することもできます。

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
 {
   HttpContext.Current.Response.Headers.Remove("X-Powered-By");
   HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
   HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
   HttpContext.Current.Response.Headers.Remove("Server");
 }

29
私の場合、最後の3つだけが機能しました。「X-Powered-By」の場合、私はまだ必要でした<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
フランクファンエイケレン

2
私の場合、上記のヘッダーは削除されませんでした。私は.net 4.0とIIS 7を使用しています。このスレッドの他のコメントに感謝します。最悪のケースである「サーバー」を除いて、すべての不要なヘッダーを削除できました。
Farjad 2013

2
コードパスを通過していないコンテンツファイル/画像/などに対して機能しますか?
Mark Sowul、2015年

「サーバー」には何を入れましたか?このようにすべきですか?Response.Headers.Remove( "サーバー:Microsoft-IIS / 7.0"); ?それとも「サーバー」でなければなりませんか?助けてください
neda Derakhshesh

「PreSendRequestHeaders」が実際に送信前の応答ヘッダーであることは他の誰かに奇妙ですか?
JDPeckham

50

私は私の中でこの設定を見つけweb.configただったためNew Web Site...(とは対照的に、Visual Studioで作成したNew Project...)を。質問はASP.NET MVCアプリケーションについて述べているので、それほど関連性はありませんが、それでもオプションです。

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <remove name="X-Powered-By" />
    </customHeaders>
   </httpProtocol>
</system.webServer>

更新:また、Troy HuntにはShhhというタイトルの記事があります。これらのヘッダーを削除する詳細な手順と、それらをスキャンするためのASafaWebツールへのリンクおよびその他のセキュリティ構成を使用して、応答ヘッダーを大声話させないでください


5
最良のオプションですが、iis7 +が必要です。それらを<clear />する必要はありません...削除で十分です。また、system.webserverにこれを追加して、別の脆弱性を削除することもできます: code <security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </ verbs> </ requestFiltering> </ security>code
felickz

<clear />要素は 'X-Powererd-By'を含むすべてのヘッダーをクリアするので、<remove />要素は冗長です。
Jan H

33

.NET Core

Serverヘッダーを削除するには、Program.csファイル内に次のオプションを追加します。

.UseKestrel(opt => opt.AddServerHeader = false)

ドットネットコア1の場合、.UseKestrel()呼び出し内にオプションを追加します。ドットネットコア2の場合、UseStartup()の後に行を追加します。

X-Powered-Byヘッダーを削除するには、IISにデプロイされている場合、web.configを編集し、system.webServerタグ内に次のセクションを追加します。

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

.NET 4.5.2

Serverヘッダーを削除するには、global.asaxファイル内に次を追加します。

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] headers = { "Server", "X-AspNet-Version" };

        if (!Response.HeadersWritten)
        {
            Response.AddOnSendingHeaders((c) =>
            {
                if (c != null && c.Response != null && c.Response.Headers != null)
                {
                    foreach (string header in headers)
                    {
                        if (c.Response.Headers[header] != null)
                        {
                            c.Response.Headers.Remove(header);
                        }
                    }
                }
            });
        }

    }

.NET 4.5.2より前

次のc#クラスをプロジェクトに追加します。

public class RemoveServerHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Headers.Remove("Server");
    }
}

次に、web.config内に次の<modules>セクションを追加します。

<system.webServer>
    ....
 <modules>
    <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
 </modules>

しかし、サブプロジェクトがこのモジュールを見つけられないという問題がありました。楽しくない。

X-AspNetMvc-Versionヘッダーの削除

'' X-AspNetMvc-Version ''タグを削除するには、任意のバージョンの.NETについて、 '' web.config ''ファイルを次のように変更します。

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

これを信じられないほど困難にしてくれたマイクロソフトに感謝します。あるいは、世界中のIISおよびMVCのインストールを追跡できるように、それがあなたの意図だったのかもしれません...


3
この時代では、これは「最悪の慣行」と見なされており、Microsoftがまだ「安全でない」をデフォルトにしており、「安全」にオプトインするのが非常に難しいとは信じがたい。Windowsが既定で一般的なファイル拡張子をどのように非表示にするかを思い出させます。これにより、疑いを持たないユーザーがウイルスをクリックするようになります。2003年にビルゲイツが「デフォルトで安全」を発表したことを思い出すようですが、その考えはどうなりましたか。
マイクネルソン2017年

2
@mikenelson気分が良くなった場合は、nginxでServerタグを削除するのも同じように困難です。結局、実際のソースコード自体をハックする必要がありました。
Rocklan、

RemoveServerHeaderModuleWEBAPIプロジェクトで働くつもりはありません。
krypru

32

IIS 7でのASP.NET MVC Webアプリケーションのクローキングで説明されているように、web.configに次の構成セクションを適用することにより、X-AspNet-Versionヘッダーをオフにすることができます。

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

次のようにGlobal.asax.csを変更して、X-AspNetMvc-Versionヘッダーを削除します。

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

カスタムヘッダーで説明されているように、次の構成セクションをweb.configに適用することで、「X-Powered-By」ヘッダーを削除できます。

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer>

IIS 7でのASP.NET MVC Webアプリケーションのクローキングhow-to-remove-server-でHttpModule説明されているように、特定のHTTPヘッダーを削除するように実装して、「サーバー」応答ヘッダーを削除する簡単な方法はありませんが、 x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7


bkaid answerを使用すると、「Server」ヘッダーを削除できます。IIS 8.
tmorell 2014年

bkaidの回答は問題ありませんが、コーディングが必要なので、構成ベースであるため、私が説明したソリューションの方が便利だと思いました。
RonyK

8

Windows Azure Webサイトページでの標準サーバーヘッダーの削除に示すように、次のようにしてヘッダーを削除できます。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true"/>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

これにより、ServerヘッダーとX-ヘッダーが削除されます。

これはVisual Studio 2015のテストでローカルに機能しました。


6
removeServerHeader = "true"を追加すると、ASP.NET 4.5.3アプリで500エラーが発生しました
Rocklan

4
@LachlanBこれはIIS 10で追加されました。IIS10.0は、リモートサーバーへのHTTPサーバーヘッダーの送信を抑制するためのremoveServerHeader属性を追加しました。出典:iis.net/configreference/system.webserver/security/...
SynerCoder

1
Azureページがコードブロックではなくスクリーンショットを提供するのが気に入っています。彼らは文字通り、可能な限りすべてのことを行って、これらの不要で潜在的に危険なタグの削除を可能な限り困難にしています。また、この問題を修正するために3年前のSO質問を参照しているとは信じられません。修正の兆候はありません。
キラバイト2018

1
このWeb.configはX-AspNetMvc-Versionヘッダーを削除しないと思います。これを削除するには、Global.asaxに何かを追加する必要があります。stackoverflow.com
Jan H

8

Asp.Net Coreでは、web.configファイルを次のように編集できます。

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

Kestrelオプションでサーバーヘッダーを削除できます。

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 

5

このブログを確認してください ヘッダーを削除するためにコードを使用しないでください。マイクロソフトによると不安定

これについての私の見解:

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

4

完全を期すためにServer、regeditを使用してヘッダーを削除する別の方法があります。

このMSDNブログを参照してください

次のレジストリキーにDisableServerHeaderというDWORDエントリを作成し、値を1に設定します。

HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters

Web.configを使用して適切な解決策を見つけたいのです<rewrite>が、書き換えモジュールをインストールする必要があり、ヘッダーを実際には削除せず、空にするだけなので、使用するのはよくありません。


これがうまくいけば、私の場合には良い解決策のように思えます。私は.netの異なるバージョンで30のWebサイトを持っているので、これらすべてのサイトでヘッダーを削除してコードを更新する3つの異なる方法が必要になります。コードを変更するよりも、構成設定またはレジストリを使用したい。
マイクネルソン2017年

私はこれを2日前にうまく適用し、うまくいきました。
Rudey 2017年

2

あなたはApplication_EndRequest()これを試して任意のヘッダーまたは何かを変更することができます

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}

1

X-Powered-ByヘッダーはIISによってHTTP応答に追加されるため、サーバーレベルでもIISマネージャーを介してヘッダーを削除できます。

web.configを直接使用できます。

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <remove name="X-Powered-By" />
     </customHeaders>
   </httpProtocol>
</system.webServer>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.