Современные веб-приложения требуют аккуратного отношения к мелочам — даже к тем, что не видны пользователю. Одни из таких мелочей — HTTP-заголовки, которые ASP.NET и IIS отправляют по умолчанию. Они несут информацию о сервере и версиях технологий, увеличивают размер ответа и потенциально облегчают жизнь злоумышленникам.
Разберём, как убрать лишние заголовки и сделать приложение чище и безопаснее.
Зачем убирать стандартные заголовки ASP.NET
При стандартной конфигурации сервер отдаёт заголовки:
ServerX-Powered-ByX-AspNet-VersionX-AspNetMvc-Version
Эти заголовки:
- увеличивают размер ответа
- раскрывают информацию о сервере
- могут стать дополнительной подсказкой для атакующих
- в больших проектах дают лишний трафик на масштабе
Удаление лишних заголовков — простой шаг в сторону оптимизации и безопасности.
Удаляем заголовок X-AspNet-Version
Самый простой случай — заголовок, который вставляется самим ASP.NET.
Отключается в web.config:
код
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
После перезапуска приложения заголовок исчезнет.
Убираем X-AspNetMvc-Version
Этот заголовок добавляется MVC-фреймворком.
Отключается одной строкой в Global.asax:
код
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Удаляем X-Powered-By
Этот заголовок относится к IIS.
Его можно выключить через управление серверами:
- Открываем IIS Manager
- Переходим к нужному сайту
- Открываем Configuration Editor
- Находим параметр, отвечающий за отправку
X-Powered-By - Отключаем
На Windows Server 2008 R2 и выше параметр доступен сразу. На старых версиях может потребоваться UrlScan.
Удаляем заголовок Server
Самый сложный случай. Варианты разные в зависимости от версии IIS.
IIS 7+ (Integrated Pipeline Mode)
Можно удалить заголовок программно:
код
protected void Application_PreSendRequestHeaders()
{
HttpContext.Current.Response.Headers.Remove("Server");
}
Работает только при включённом Integrated Pipeline Mode.
IIS 6 и старые системы
Единственный рабочий вариант — Microsoft UrlScan.
В конфигурации можно убрать или переписать Server.
Проверяем результат
После внесения изменений:
- открываем DevTools → вкладка Network
- обновляем страницу
- смотрим список заголовков в ответе сервера
Или проверяем через терминал:
код
curl -I https://example.com
Если всё сделано правильно — лишние заголовки исчезнут.
Итоги
Удаление стандартных заголовков ASP.NET и IIS — это:
- меньше трафика
- выше безопасность
- отсутствие лишней информации о сервере
- чистый и аккуратный HTTP-ответ
Рекомендуется применять эти настройки на всех продакшн-серверах, особенно если проект публичный и обрабатывает чувствительные данные.
FAQ
Зачем вообще убирать стандартные заголовки?
Они раскрывают информацию о сервере, версиях ASP.NET и MVC. Это не критично, но уменьшает безопасность и создаёт лишний «шум» в ответах сервера.
Удаление заголовков может сломать приложение?
Нет, это безопасные настройки. Они не влияют на логику работы приложения — только на HTTP-ответ.
Работает ли это в .NET Core?
Для .NET Core заголовки настраиваются иначе — через middleware. Могу подготовить пример, если нужно.
Можно ли убрать заголовок Server на всех IIS?
Нет. На старых версиях IIS (до 7) работает только UrlScan. На новых — через код или через фильтры.
Нужно ли убирать все заголовки подряд?
Не обязательно. Основное: скрыть версию ASP.NET и не раскрывать лишние детали о сервере.
Полезные советы
- После каждого изменения проверяй заголовки через
curl -I— это быстрее, чем открывать браузер. - На продакшне держи одинаковые настройки для всех веб-серверов (особенно при балансировке).
- Если используешь Web.config-трансформации, можно автоматически отключать лишние заголовки только для Release.
- Для проектов с повышенными требованиями безопасности стоит добавить HTTP Security Headers (CSP, HSTS, X-Frame-Options).
- Логику удаления заголовков удобно вынести в отдельный модуль, чтобы не размазывать по проекту.
Полезные ссылки
- Документация Microsoft по настройке
httpRuntime
https://learn.microsoft.com/en-us/dotnet/api/system.web.configuration.httpruntime - Отключение MVC Response Header
https://learn.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/adding-a-controller - UrlScan Security Tool (официальный архив Microsoft)
https://www.microsoft.com/en-us/download/details.aspx?id=7435 - Работа с заголовками в ASP.NET Core Middleware
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/ - Справочник по HTTP заголовкам
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers


