是否可以在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”
答案 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-by
和server
标头。
在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,UseKestrel
是ConfigureWebHostDefaults
的一部分,而不是早期版本中的CreateDefaultBuilder
。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseKestrel(options => options.AddServerHeader = false);
});
答案 3 :(得分:2)
对于那些试图做同样的事情(删除由Kestrel Web服务器添加的服务器响应标头)但使用ASP.NET core 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的说明。