【问题标题】:How to remove Server Header in Asp.Net Core 2.2.1 Web App?如何在 Asp.Net Core 2.2.1 Web App 中删除服务器标头?
【发布时间】:2019-09-29 19:36:11
【问题描述】:

我正在使用 Asp.Net Core 2.2.1。我正在尝试从响应中删除 server 标头。我尝试在ConfigureKestrel() 中添加options.AddServerHeader = false;,但仍然不成功。请帮助我解决我哪里出错了。

这是我的代码:

程序.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>

回复图片

谢谢,

阿卜杜勒

【问题讨论】:

  • 我认为这是一个改变你的 IIS 配置的案例,而不是你的代码。
  • 查看另一个问题的答案:stackoverflow.com/a/53222946/519348
  • @TZHX 上面提到的答案不起作用。我仍然可以在响应中看到服务器标头。还有其他帮助吗?

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


【解决方案1】:

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

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

这条线&lt;requestFiltering removeServerHeader="true" /&gt; 可以解决问题。此外,您还可以通过在httpProtocol 下添加customHeaders 部分来删除自定义标题,例如X-Powered-By

请确保您已启用请求过滤

我希望这会有所帮助。

【讨论】:

  • 这不起作用。我仍在获取服务器标头
  • 请确保您在万维网服务下启用了请求过滤 --> 安全性如屏幕截图所示
  • 在本地开发测试需要配置iis中的这个设置吗?
  • @Abdul 问题出在您的 web.config 中。它没有&lt;security&gt; &lt;requestFiltering removeServerHeader="true" /&gt; &lt;/security&gt;。看看截图WithServerHeaderNoServerHeader。此外,更新了Web.config。添加安全部分后,您将看不到 server 标头。我希望这会有所帮助。
  • 如果您不使用这些功能,我认为不需要检查所有内容,例如基本身份验证等。只有您需要的。另外,尝试将其发布到 IIS 并查看发布的代码是否在完整的 IIS 下工作,因为最终你必须在那里托管:)
【解决方案2】:

我们可以通过 URLRewrite 做到这一点。请注意,这不会一起删除标题,但会删除它的值。

以下是步骤:

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

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

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

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

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

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

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

步骤 6. 创建出站规则,如下所示。

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

【讨论】:

  • 我是否也需要按照这些步骤在开发模式下进行测试?
  • 您需要在 IIS 中为所需的网站实施此步骤。项目的模式无关紧要(开发/SIT/生产)。
  • 通过 IIS Express 运行怎么样?
  • 我不确定在开发中为什么要隐藏。由于安全限制,此设置将在生产环境或其他环境中删除,因此黑客不会知道我们正在使用哪个 Web 服务器。
猜你喜欢
  • 2019-02-26
  • 2018-04-04
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多