Браузеры умеют защищать пользователей от ряда атак, но только если сервер явно это разрешает через HTTP-заголовки. Без них браузер не знает, как себя вести, и оставляет дыры открытыми.
Как добавить
Подключаем middleware в
Program.cs:app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
context.Response.Headers.Add("X-Frame-Options", "DENY");
context.Response.Headers.Add("X-XSS-Protection", "1; mode=block");
await next();
});
Этот блок нужно поставить до
app.UseRouting() и других middleware, иначе часть ответов уйдёт без заголовков.Что делает каждый заголовок
X-Content-Type-Options: nosniff запрещает браузеру угадывать тип содержимого. Без него браузер может решить, что загруженный текстовый файл — это скрипт, и выполнить его. Атака называется MIME sniffing.X-Frame-Options: DENY запрещает встраивать страницу в <iframe>. Защищает от clickjacking — когда злоумышленник накладывает прозрачный iframe поверх своего сайта и перехватывает клики пользователя:// запрет для всех
context.Response.Headers.Add("X-Frame-Options", "DENY");
// или разрешить только своему домену
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
X-XSS-Protection: 1; mode=block включает встроенный XSS-фильтр в старых браузерах. Если атака обнаружена — страница блокируется целиком, а не фильтруется частично. Современные браузеры опираются на Content-Security-Policy, а этот заголовок оставлен для совместимости со старыми версиями IE и Edge.Что добавить ещё
Три заголовка выше это минимум. Для полноценной защиты стоит также настроить:
Content-Security-Policy — белый список источников скриптов, стилей и медиа. Самый мощный инструмент против XSS:context.Response.Headers.Add(
"Content-Security-Policy",
"default-src 'self'; script-src 'self'; style-src 'self'"
);
Referrer-Policy — контролирует, какой URL браузер передаёт при переходе с вашей страницы:context.Response.Headers.Add("Referrer-Policy", "strict-origin-when-cross-origin");Permissions-Policy — ограничивает доступ к браузерным API: камера, микрофон, геолокация:context.Response.Headers.Add(
"Permissions-Policy",
"camera=(), microphone=(), geolocation=()"
);
Проверка
После деплоя проверить заголовки можно на securityheaders.com — сервис покажет, что выставлено, что отсутствует и насколько это критично. Или через DevTools: вкладка Network, любой запрос, раздел Response Headers.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор