将 Azure Web App 上的响应服务器头从第一次重定向请求中删除为 HTTPS。

问题描述 投票:0回答:1

我正试图从Azure Web应用程序中删除响应服务器头(与ASP Net核心应用程序)。

经过多次尝试改变 web.config 并使用中间件在app代码中删除头,微软也不甘示弱,将响应头设置为Server。Microsoft-IIS10.0:)

这个问题只出现在我试图用http(而不是https)访问服务器的时候。服务器的响应代码是301,这是唯一有Server头的响应。

检查日志,我无法找到任何对http:/的请求,也许这就是为什么我无法删除头的原因,因为在我的应用程序代码中没有处理该请求。

我想的一个解决方案是禁用 azure 的 仅限HTTPS 并在我的代码中重定向到https(我测试了一下,工作正常--服务器头被删除了

在不禁用HTTPS专用选项的情况下,是否还有其他变通方法?

以下是我的尝试

启动.cs

    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            context.Response.Headers.Add("server", string.Empty)
        }
        app.UseHttpsRedirection();
    }

web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <httpRuntime enableVersionHeader="false" />
        <!-- Removes ASP.NET version header.  -->
    </system.web>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <remove name="Server" />
                <remove name="X-Powered-By" />
            </customHeaders>
            <redirectHeaders>
                <clear />
            </redirectHeaders>      
        </httpProtocol>
        <security>
            <requestFiltering removeServerHeader="true" />
            <!-- Removes Server header in IIS10 or later and also in Azure Web Apps -->
        </security>
        <rewrite>  
            <outboundRules>
                <rule name="Change Server Header"> <!-- if you're not removing it completely -->
                  <match serverVariable="RESPONSE_Server" pattern=".+" />
                    <action type="Rewrite" value="Unknown" />
                </rule>
            </outboundRules> 
        </rewrite>      

    </system.webServer>
</configuration>
asp.net-core azure-web-sites azure-web-app-service response-headers azure-webapps
1个回答
0
投票

更新

当URL的 http:// 的请求,IIS会进行处理,这次不用代码。所以我们不能通过代码来控制,只能在服务器上进行设置,比如一些脚本或者工具。但是在Azure上,我们没有办法直接作为物理服务器来操作,所以经过探索,我建议 Front Door 可以用来处理这个问题。通过代理隐藏服务器信息应该是一个比较好的方法。

经过我的测试,服务器信息是隐藏的,大家可以参考这个 文件 . 从图片中我们可以看到,没有301重定向请求,也没有其他请求中的服务器信息。

enter image description here

enter image description here

PRIVIOUS

您需要修改 Global.asax.csWeb.config 文件在你的程序中。

在Global.asax.cs中。

 public class MvcApplication : System.Web.HttpApplication
 {
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        MvcHandler.DisableMvcResponseHeader = true;
        PreSendRequestHeaders += Application_PreSendRequestHeaders;
    }

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        //HttpContext.Current.Response.Headers.Remove("Server");
        HttpContext.Current.Response.Headers.Set("Server","N/A");
    }
 }

和Web.config中。

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" >
  </modules>  
  <httpProtocol>
    <customHeaders>
       <remove name="X-Powered-By" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

然后u就可以部署你的程序了。经过以上代码修改后,访问接口或静态资源可以看到服务器信息被修改了,当然也可以通过以下方式删除 Remove.

你也可以通过http状态码来处理特殊事件。

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
     //HttpContext.Current.Response.Headers.Remove("Server");
     int StatusCode= HttpContext.Current.Response.StatusCode;
     // handle like http status code 301 
     HttpContext.Current.Response.Headers.Set("Server","N/A");
}

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.