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

eat*_*ode 14 web-config kestrel-http-server asp.net-core asp.net-core-2.1

是否可以删除ASP.NET Core 2.1应用程序中的服务器响应标头(在带有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>
Run Code Online (Sandbox Code Playgroud)

响应的前四个更改工作正常,但未删除Server标头.我还是看"红隼"

ric*_*888 22

在NET6中,它变成了

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseKestrel(option => option.AddServerHeader = false);
Run Code Online (Sandbox Code Playgroud)


use*_*336 18

Kestrel Server标头在请求管道中添加得太晚.因此,无法通过web.config或中间件删除它.

您可以通过设置删除Server头AddServerHeader属性falseKestrelServerOptions,这可以在Program.cs中完成的.

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

  • 这不会删除标题。kestrel 向 IIS 提供响应,而 iis 添加此标头。要删除此标头,您必须配置 web.config 文件 (5认同)

use*_*616 16

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

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

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

<?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>
Run Code Online (Sandbox Code Playgroud)

然后发布应用程序并在IIS上重新启动站点。

  • @ hvaughan3我也注意到了-Visual Studio确实说“不允许使用'removeServerHeader'属性”,通过用摆动的绿线突出显示该属性来强调它,但是它确实按照建议的方式工作。谢谢@ user3172616! (2认同)

nil*_*arp 5

对于 Dotnet Core 3.1UseKestrelConfigureWebHostDefaultsCreateDefaultBuilder早期版本相反的一部分。

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

  • 这有效。可能值得一提的是,如果您使用此修复程序,则无法在 Visual Studio 中使用 IISExpress 运行应用程序。您将收到此错误:“System.InvalidOperationException:‘应用程序正在 IIS 进程内运行,但未配置为使用 IIS 服务器。’” (10认同)
  • 我也遇到同样的情况。`UseKestrel` 将无法在 IIS 服务器中运行您的应用程序 (5认同)

Vla*_*min 5

这些说明仅适用于 IIS 10.0。

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

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

    
    <security>
        <requestFiltering removeServerHeader ="true" />
    </security>
    
    
    Run Code Online (Sandbox Code Playgroud)
  3. 保存文件并重新启动 IIS 应用程序。

  • 猎户座网站是什么? (2认同)