Удалить ответный заголовок сервера в Azure Web App из первого запроса на перенаправление в HTTPS - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь удалить ответный заголовок сервера из Azure веб-приложения (с основным приложением ASP Net)

После многих попыток изменить web.config и удаляя заголовок в коде приложения с помощью промежуточного программного обеспечения, Microsoft не сдается и не устанавливает заголовок ответа на Server: Microsoft-IIS / 10.0:)

Проблема появляется только тогда, когда я пытаюсь для доступа к серверу по http (не https). Код ответа от сервера - 301, и это единственный ответ с заголовком сервера.

Проверка журналов Я не смог найти ни одного запроса на http: //, и, возможно, именно поэтому я ' Я не могу удалить заголовок, потому что запрос не обрабатывается в коде моего приложения.

Решение, которое я думаю, состоит в том, чтобы отключить azure только HTTPS и выполнить перенаправление в https в моем коде (я проверял и работает - заголовок сервера удален)

Есть ли другой обходной путь без отключения опции HTTPS only?

Вот что я пробовал

Startup.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>

1 Ответ

0 голосов
/ 29 апреля 2020

ОБНОВЛЕНИЕ

Когда запрашивается URL-адрес http://, IIS обработает его, на этот раз без кода. Поэтому мы не можем контролировать его с помощью кода, мы можем установить его только на сервере, например, в некоторых скриптах или инструментах. Но на Azure у нас нет возможности напрямую работать в качестве физического сервера, поэтому после исследования я предлагаю использовать Front Door для решения этой проблемы. Лучше было бы скрыть информацию о сервере через прокси.

После моего теста информация о сервере скрыта, вы можете обратиться к этому документу . Из рисунка видно, что нет запроса на перенаправление 301 и информации о сервере в других запросах.

enter image description here

enter image description here

PRIVIOUS

Вам необходимо изменить файл Global.asax.cs и Web.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>

Тогда вы можете развернуть свое приложение. После вышеупомянутой модификации кода, доступ к интерфейсу или ресурсам stati c может видеть, что информация сервера изменена, конечно, она также может быть удалена с помощью 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

...