116

IIS7 から "Server" 応答ヘッダーを削除する方法はありますか? HttpModules を使用して同じことを達成できることを示す記事がいくつかあります。これは、サーバーに対する管理者権限がない場合に役立ちます。また、ISAPI フィルターを書きたくありません。

サーバーに対する管理者権限があります。だから私は上記のことをしたくありません。だから、私が同じことをするのを手伝ってください。

4

20 に答える 20

119

これを global.asax.cs に追加します。

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}
于 2011-09-07T18:05:00.063 に答える
79

IIS7では、HTTPモジュールを使用する必要があります。VSでクラスライブラリとして以下をビルドします。

namespace StrongNamespace.HttpModules
{
  public class CustomHeaderModule : IHttpModule
  { 
    public void Init(HttpApplication context)
    {
      context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    } 

    public void Dispose() { } 

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
      HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts");
    }
  }
}

次に、以下をweb.configに追加するか、IIS内で構成します(IIS内で構成する場合、アセンブリはGAC内にある必要があります)。

<configuration>
  <system.webServer>
    <modules>
      <add name="CustomHeaderModule"
       type="StrongNamespace.HttpModules.CustomHeaderModule" />
    </modules>
  </system.webServer>
</configuration>
于 2009-07-29T16:10:47.010 に答える
44

IIS 用の URL Rewrite モジュール バージョン 2.0 (UrlRewrite) を有効にして、構成セクション<configuration><system.webServer><rewrite>アウトバウンド ルールを追加します。

<outboundRules>
  <rule name="Remove RESPONSE_Server" >
    <match serverVariable="RESPONSE_Server" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>
于 2012-09-27T07:10:42.593 に答える
22

実際には、上記のコード化されたモジュールと Global.asax の例は、有効な要求に対してのみ機能します。

たとえば、URL の末尾に < を追加すると、サーバー ヘッダーを公開する「Bad request」ページが表示されます。多くの開発者はこれを見落としています。

表示されているレジストリ設定も機能しません。URLScan は、「サーバー」ヘッダーを削除する唯一の方法です (少なくとも IIS 7.5 では)。

于 2013-02-15T11:00:35.273 に答える
18

または、web.config に追加します。

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-AspNet-Version" />
            <remove name="X-AspNetMvc-Version" />
            <remove name="X-Powered-By" />
            <!-- <remove name="Server" />  this one doesn't work -->
        </customHeaders>
    </httpProtocol>
</system.webServer>
于 2013-10-29T13:40:07.733 に答える
12

URL Rewrite answerへの追加、ここに完全な XML がありますweb.config

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Remove RESPONSE_Server" >
        <match serverVariable="RESPONSE_Server" pattern=".+" />
        <action type="Rewrite" value="Company name" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

URL 書き換え

于 2015-09-14T10:11:47.243 に答える
11

Server:ヘッダーを削除するには、に移動しGlobal.asax、イベントを見つけて作成し、次のように行を追加します ( BKこのブログApplication_PreSendRequestHeadersのおかげで、これは Cassini / ローカル dev でも失敗しません)。

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    // Remove the "Server" HTTP Header from response
    HttpApplication app = sender as HttpApplication;
    if (null != app && null != app.Request && !app.Request.IsLocal &&
        null != app.Context && null != app.Context.Response)
    {
        NameValueCollection headers = app.Context.Response.Headers;
        if (null != headers)
        {
            headers.Remove("Server");
        }
    }
}

Azure/IIS7 で関連するすべてのヘッダーを削除し、Cassini でも動作する完全なソリューションが必要な場合は、このリンクを参照してください。これは、HttpModules または URLScan を使用せずにこれらのヘッダーを無効にする最良の方法を示しています。

于 2012-10-09T16:49:23.247 に答える
9

ヘッダーを削除したいだけの場合は、ルキファーの回答の短縮版を使用できます。

using System.Web;

namespace Site
{
    public sealed class HideServerHeaderModule : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders +=
            (sender, e) => HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

そして、でWeb.config

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
  </modules>
</system.webServer>
于 2011-06-26T12:29:23.667 に答える
5

HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeaderレジストリ エントリを の にREG_DWORD設定してみてください1

于 2009-10-12T16:08:20.367 に答える
4

UrlScanAlternateServerName=は、以下を使用してサーバー ヘッダーを削除することもできます[options]

于 2009-08-10T02:06:23.013 に答える
2

URLScan のバージョンによっては、eddiegroves の回答をフォローアップすると、代わりRemoveServerHeader=1[options].

このオプションが追加された URLScan のバージョンはわかりませんが、バージョン 2.5 以降で使用できます。

于 2011-09-02T18:15:53.123 に答える
1

以下のコードを Global.asax.cs ファイルに追加できます

    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
    }
于 2019-06-06T09:55:05.827 に答える
1

私はこれを調査しましたが、URLRewrite メソッドはうまく機能します。どこにもうまくスクリプト化された変更が見つからないようです。これは PowerShell v2 以降と互換性があるように記述し、IIS 7.5 でテストしました。

# Add Allowed Server Variable
    Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"}
# Rule Name
    $ruleName = "Remove Server Response Header"
# Add outbound IIS Rewrite Rule
    Add-WebConfigurationProperty -pspath "iis:\" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing='False'}
#Set Properties of newly created outbound rule 
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "serverVariable" -value "RESPONSE_SERVER"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "pattern" -value ".*"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/action" -name "type" -value "Rewrite"
于 2018-06-05T13:53:27.403 に答える
0

ここにあるすべてのものと、他のいくつかの同様のスタックオーバーフロースレッドで試しました。

設定を変更した後、ブラウザのキャッシュをクリアするのを忘れたため、少し電話が切れました。これを行わず、ファイルがローカル キャッシュにある場合は、元のヘッダーで返されます (当然)。

runAllManagedModulesForAllRequestsを削除することで、ほとんど機能するようになりました。

<modules runAllManagedModulesForAllRequests="true">

これにより、ほとんどの静的ファイルから余分なヘッダーが削除されましたが、WebAPI プロジェクトの一部の静的ファイルで "サーバー" ヘッダーを取得していました。

最終的にこのソリューションを見つけて適用したところ、不要なヘッダーがすべてなくなりました。

https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

ここにある彼のコードについて説明します:

https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5

これはネイティブ コード モジュールです。値を空白にするだけでなく、サーバー ヘッダーを削除することもできます。デフォルトでは、次のものを削除します。

  • サーバ
  • X-Powered-By
  • X-Aspnet-バージョン
  • サーバー: Microsoft-HTTPAPI/2.0 -- 「要求が IIS に渡されなかった」場合に返されます
于 2018-02-20T21:16:01.713 に答える