从 ASP.NET Core 2.1 应用程序中删除 "Server" header

Remove "Server" header from ASP.NET Core 2.1 application

是否可以在 ASP.NET Core 2.1 应用程序中删除 Server 响应 header(运行 在带有 IIS 10 的 Server 2016 上)?

我尝试将以下内容放入 web.config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="sameorigin" />
            <add name="X-XSS-Protection" value="1; mode=block" />
            <add name="X-Content-Type-Options" value="nosniff" />
            <remove name="X-Powered-By" />
            <remove name="Server" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

对响应的前四个更改工作正常,但 服务器 header 没有被删除。我仍然看到 "Kestrel"

Kestrel 服务器 header 在请求管道中添加得太晚了。因此无法通过 web.config 或中间件删除它。

您可以通过在 KestrelServerOptions 上将 AddServerHeader property 设置为 false 来移除服务器 header,这可以在 Program.cs 中完成。

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel(options => options.AddServerHeader = false)
            .UseStartup<Startup>();

对于那些试图做同样事情(删除 Kestrel 网络服务器添加的服务器响应 header)但使用 ASP.NET 核心 2.2 的人,他们应该使用扩展方法 ConfigureKestrel (https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.webhostbuilderkestrelextensions.configurekestrel?view=aspnetcore-2.2#Microsoft_AspNetCore_Hosting_WebHostBuilderKestrelExtensions_ConfigureKestrel_Microsoft_AspNetCore_Hosting_IWebHostBuilder_System_Action_Microsoft_AspNetCore_Server_Kestrel_Core_KestrelServerOptions__) 而不是扩展方法 UseKestrel.

此解决方案适用于 IIS 10+ 版本,并允许在服务器响应中删除 x-powered-byserver headers。

在 IIS 10 中添加了一个新属性:removeServerHeader

我们需要在 asp.net 核心应用程序中创建 web.config 文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

然后在 IIS 上发布应用并重启网站。

对于 Dotnet Core 3.1 UseKestrelConfigureWebHostDefaults 的一部分,而不是早期版本中的 CreateDefaultBuilder

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>()
                      .UseKestrel(options => options.AddServerHeader = false);
        });

这些说明仅适用于 IIS 10.0。

  1. 打开位于 Orion 网站根目录中的 web.config 文件。

  2. 在web.configsystem.webServer节点中配置requestFiltering:

    
    <security>
        <requestFiltering removeServerHeader ="true" />
    </security>
    
    
  3. 保存文件并重新启动您的 IIS 应用程序。

在NET6中,变为

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseKestrel(option => option.AddServerHeader = false);

@SamAlekseev 的回答非常适合删除 ServerX-Powered-By header。唯一缺少的是也删除了 X-AspNet-Version。这适用于 Azure App Services 以及 IIS

完成web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- To customize the asp.net core module uncomment and edit the following section. 
  For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
  <!--
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
  -->
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false"/>
  </system.web>
</configuration>

来源:

https://azure.microsoft.com/en-us/blog/removing-standard-server-headers-on-windows-azure-web-sites/