如何在Asp.Net Core 2.2.1 Web App中删除服务器头?

时间:2019-05-12 18:28:54

标签: c# asp.net-core kestrel-http-server response-headers kestrel

我正在使用Asp.Net Core 2.2.1。我正在尝试从响应中删除服务器标头。我尝试在options.AddServerHeader = false;内添加ConfigureKestrel(),但仍然失败。请协助我解决问题。

这是我的代码:

  

Program.cs

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            return WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureKestrel((context,options) => {
                    // Set properties and call methods on options
                    options.AddServerHeader = false;
                });
        }
    }
  

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>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
    <handlers>
      <remove name="aspNetCore" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="44342" />
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
  

响应图片

enter image description here

谢谢

阿卜杜勒

2 个答案:

答案 0 :(得分:3)

如果您的应用程序在Kestrel上运行,则用ConfigureKestrel调用options.AddServerHeader = false;只会删除服务器标头。在IIS / IISExpress上托管应用程序时,需要添加具有以下设置的web.config

<configuration> 
  <system.webServer>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

此行<requestFiltering removeServerHeader="true" />可以解决问题。此外,如果愿意,还可以通过在X-Powered-By下添加customHeaders部分来删除自定义标头,例如httpProtocol

请确保您已启用请求过滤

enter image description here

我希望这会有所帮助。

答案 1 :(得分:1)

我们可以使用URLRewrite做到这一点。请注意,这不会一起删除标头,但会删除标头的值。

enter image description here

以下是步骤:

步骤1.安装URLRewrite。要安装URLRewrite,请转到以下链接

http://www.iis.net/downloads/microsoft/url-rewrite

步骤2。打开要删除服务器标头的站点,然后单击URLRewrite部分。

enter image description here

步骤3.单击右侧“操作”窗格中的“查看服务器变量”。 enter image description here

第4步。单击“添加”按钮,然后在提供的文本框中输入“ RESPONSE_SERVER”。 6562.image_21870933.png

第5步。现在我们需要创建一个出站规则。要了解如何创建出站规则,请查看以下链接

http://www.iis.net/learn/extensions/url-rewrite-module/creating-outbound-rules-for-url-rewrite-modul ...

第6步。创建如下的出站规则。 5756.image_036485DD.png

请注意,这是网站特定的规则。如果要为所有应用程序创建规则,请在服务器级别创建规则。另外,某些应用程序,尤其是第三方应用程序,可能需要Server标头,因此您可能需要为这些应用程序删除此规则。