web-dev-qa-db-ja.com

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

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

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

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

170
Paul Fryer

X-Powered-ByはIISのカスタムヘッダーです。 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.configヘッダーを削除するには、これをX-AspNet-Versionに追加します。

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

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

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

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

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

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

この構成は、_web.configでなく、Visual Studioで作成されたNew Web Site...用のNew Project...で見つかりました。質問にはASP.NET MVCアプリケーションが記載されているため、関連性はありませんが、オプションです。

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

Update:また、Troy Huntには Shhh…応答ヘッダーが大きすぎて話さないようにしてください という詳細な手順があります。これらのヘッダーと、彼および他のセキュリティ構成をスキャンするための ASafaWeb ツールへのリンクを削除します。

49
Kevin Hakanson

.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ヘッダーの削除

あらゆるバージョンの.NETで '' X-AspNetMvc-Version ''タグを削除するには、 '' web.config ''ファイルを変更して以下を含めます。

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

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

26
Rocklan

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>

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

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

8
Eric Dunaway

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

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

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

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

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

このMSDNブログを参照

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

HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

私はむしろWeb.configを使用して適切なソリューションを見つけたいと思いますが、<rewrite>を使用すると、書き換えモジュールをインストールする必要があり、それでもヘッダーを削除せずに空にするだけなので、良くありません。

2
Rudey

チェック このブログ ヘッダーを削除するためにコードを使用しないでください。 Microsoft に従って不安定です

これに関する私の見解:

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

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

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

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

Application_EndRequest()でヘッダーなどを変更できます。これを試してください

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