从ASP.NET Core 2.1应用程序中删除“服务器”标头

时间:2018-09-21 23:38:44

标签: asp.net-core web-config asp.net-core-2.1 kestrel-http-server

是否可以在ASP.NET Core 2.1应用程序中运行 Server 响应标头(在带有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>
</sytem.webServer>

对Response的前四个更改工作正常,但未删除 Server 标头。我仍然看到“茶est”

4 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:4)

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

在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上发布应用程序并重新启动站点。

答案 2 :(得分:4)

对于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);
        });

答案 3 :(得分:2)