Как удалить заголовок сервера в веб-приложении Asp.Net Core 2.2.1?

Я использую Asp.Net Core 2.2.1. Я пытаюсь удалить заголовок server из ответа. Я пробовал добавить 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>

Изображение ответа

введите описание изображения здесь

Спасибо,

Абдул


person fingers10    schedule 12.05.2019    source источник
comment
Я думаю, что в этом случае это случай изменения вашей конфигурации IIS, а не вашего кода.   -  person TZHX    schedule 12.05.2019
comment
см. этот ответ по другому вопросу: stackoverflow.com/a/53222946/519348   -  person TZHX    schedule 12.05.2019
comment
@TZHX ответ, упомянутый выше, не работает. Я все еще вижу заголовок сервера в ответе. Любая другая помощь?   -  person fingers10    schedule 12.05.2019


Ответы (2)


Вызов ConfigureKestrel с options.AddServerHeader = false; удалит заголовок сервера, только если ваше приложение работает на Kestrel. Когда вы размещаете свое приложение на 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

Убедитесь, что у вас включена фильтрация запросов.

введите описание изображения здесь

Надеюсь, это поможет.

person Shahzad Hassan    schedule 12.05.2019
comment
Это не работает. Я все еще получаю заголовок сервера - person fingers10; 13.05.2019
comment
Убедитесь, что у вас включена фильтрация запросов в разделе World Wide Web Services - ›Безопасность, как показано на снимке экрана. - person Shahzad Hassan; 13.05.2019
comment
Эти настройки в iis нужно настроить для тестирования в локальной разработке? - person fingers10; 13.05.2019
comment
Да на локальном IIS. Однако вам нужно будет сделать это и на сервере при развертывании приложения. - person Shahzad Hassan; 13.05.2019
comment
как насчет работы через IIS Express? - person fingers10; 14.05.2019
comment
Вам не нужно ничего устанавливать для IISExpress, поскольку это автономная версия IIS с большинством включенных функций. Чтобы установить эти правила глобально, вы можете изменить файл applicationhost.config, который находится в скрытой папке .vs в каталоге вашего проекта в папке config. Когда в вашем проекте есть файл web.config, он считывает эти настройки оттуда и отменяет глобальные настройки. Файл applicationhost.config создается автоматически при запуске приложения в Visual Studio. - person Shahzad Hassan; 14.05.2019
comment
Но при работе через IIS Express отображается Server Header: Microsoft-IIS/10.0 - person fingers10; 14.05.2019
comment
У вас есть файл web.config в корне проекта? Или вы модифицировали applicationhost.config? Я протестировал его перед публикацией, и он работает нормально, так что на вашей стороне должно быть что-то другое. Можно ли загрузить образец кода на GitHub или что-то в этом роде? - person Shahzad Hassan; 14.05.2019
comment
Вот репозиторий github с решением. Пожалуйста, проверьте и помогите. Ссылка репо - person fingers10; 15.05.2019
comment
@Abdul Проблема в вашем web.config. У него нет <security> <requestFiltering removeServerHeader="true" /> </security>. Взгляните на скриншоты WithServerHeader и NoServerHeader. Кроме того, обновленный Web.config. После добавления раздела безопасности вы не увидите заголовок server. Надеюсь, это поможет. - person Shahzad Hassan; 16.05.2019
comment
У меня был <security> <requestFiltering removeServerHeader="true" /> </security> в моем реальном проекте, и, поскольку это не сработало, я удалил его. После этого я сделал копию для тестового репо с этим удаленным кодом. В любом случае я снова проверю со своей стороны и обновлю ответ. - person fingers10; 16.05.2019
comment
Как вы запускаете приложение в IISExpress? - person Shahzad Hassan; 16.05.2019
comment
Я добавил и попытался снова, но все еще не работал. Я запускаю решение, нажимая клавишу F5. Я добавил сюда рабочий GIF. WorkingDemo Пожалуйста, проверьте. Я все еще не уверен, где я ошибаюсь - person fingers10; 16.05.2019
comment
Как ни странно, попробуйте удалить applicationhost.config, который должен находиться в папке ResponseHeaderTest\Test\.vs\config. Вам может потребоваться показать скрытые папки, чтобы увидеть папку .vs. Файл будет создан снова при запуске IISExpress. - person Shahzad Hassan; 16.05.2019
comment
Пробовал, но все равно не удаляется. Что-нибудь еще мне нужно настроить? - person fingers10; 16.05.2019
comment
Ваш запрос проходит через прокси? Я буквально взял ваш код, скомпилировал и запустил в IISExpress. Присутствовал заголовок сервера. Итак, я изменил we.config и запустил его снова, и заголовок server исчез. Что-то не так на вашем конце. Не могли бы вы попробовать создать новое веб-приложение Asp.Net Core в другой папке, добавить файл web.config и изменить его. Потом запусти и посмотри получишь заголовок или нет. - person Shahzad Hassan; 17.05.2019
comment
Никаких прокси. Я попробую вернуться. Кстати, все, что находится под безопасностью, нужно проверять во всемирных веб-сервисах? Я только что проверил фильтрацию запросов в папке безопасности в IIS - person fingers10; 17.05.2019
comment
Я не думаю, что все нужно проверять, если вы не используете эти функции, например. Базовая аутентификация и т. Д. Только то, что вам нужно. Кроме того, попробуйте опубликовать его в IIS и посмотрите, работает ли опубликованный код под полным IIS, так как в конечном итоге вам нужно разместить там :) - person Shahzad Hassan; 17.05.2019
comment
Я опубликовал в IIS и проверил. Заголовок сервера удален, и его больше нет. :) Спасибо @Shahzad Hassan - person fingers10; 19.05.2019
comment
Отлично, я рад, что смог помочь. Приятно знать, что он наконец-то заработал. Не знаю, почему он не работает на IISExpress, но беспокоиться не о чем. Если это все еще вас беспокоит, попробуйте на другом компьютере и посмотрите, будет ли он вести себя так же :) - person Shahzad Hassan; 20.05.2019
comment
Хорошо, но как это сделать в appsettings.json? - person JHBonarius; 12.01.2021

Мы можем сделать это с помощью URLRewrite. Обратите внимание, что это не приведет к удалению всего заголовка, но удалит его значение.

введите описание изображения здесь

Следующие шаги:

Шаг 1. Установите URLRewrite. Чтобы установить URLRewrite, перейдите по следующей ссылке

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

Шаг 2. Откройте сайт, с которого вы хотите удалить заголовок сервера, и щелкните раздел URLRewrite.

введите описание изображения здесь

Шаг 3. Щелкните «Просмотр переменных сервера» на панели «Действия» справа. введите описание изображения здесь

Шаг 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, поэтому вам может потребоваться удалить это правило для этих приложений.

person Mallikarjuna Golla    schedule 13.05.2019
comment
Нужно ли мне также выполнять эти шаги для тестирования в режиме разработки? - person fingers10; 13.05.2019
comment
Вам необходимо реализовать эти шаги в IIS для требуемых веб-сайтов. Режим проекта не имеет значения (Разработка / SIT / Production). - person Mallikarjuna Golla; 14.05.2019
comment
как насчет работы через IIS Express? - person fingers10; 14.05.2019
comment
Я не уверен в разработке, зачем вам спрятаться. Из-за ограничений безопасности этот параметр будет удален для производственной или других сред, поэтому хакеры не будут знать, какой веб-сервер мы используем. - person Mallikarjuna Golla; 19.05.2019