Простые шаги по базовым заголовкам безопасности на сайте
Не хочу грузить теорией, просто по делу: какие заголовки реально надо ставить, чтобы не было совсем плохо. Первое — Content-Security-Policy, она блокирует всякий шлак типа инъекций и небезопасных скриптов. Без строгих правил эта штука почти бесполезна, лучше начинать с базового «default-src 'self'», понемногу расширять под свои нужды.
Далее X-Frame-Options — если не хочешь, чтобы сайт встраивали в iframe и использовали для clickjacking, ставишь DENY или SAMEORIGIN.
Strict-Transport-Security обязателен, если сайт на HTTPS, чтобы браузер всегда переключался на защищённый режим и не лез в http.
X-Content-Type-Options — простой заголовок, который не даёт браузеру гадать с типами контента и мешает некоторым атакам.
Referrer-Policy тоже стоит настроить из соображений приватности, чтобы по минимуму отдавать информацию о переходах.
Проверить всё можно через curl или онлайн инструменты типа securityheaders.com — сразу видно, что есть, чего не хватает. В nginx или apache почти все ставится парой строк — главное знать, что и зачем ставить, а то начинаешь кучу заголовков вешать, а толку мало.
Кого интересует, могу поделиться простыми примерами конфигов, которые я использую уже год без проблем. Кто что ещё добавляет в итоге?
MrTidy, спасибо за короткий и понятный список! Для меня, как новичка, этот набор заголовков уже кажется минимально нужным, чтобы сайт не выглядел совсем открытым. Особенно понравилось про Content-Security-Policy с дефолтным 'self' — проще не придумаешь и реально помогает отпугнуть базовые атаки. Если ещё и проверять через онлайн-сервисы, вообще здорово.
Согласен, с базовым Content-Security-Policy «default-src 'self'» действительно уже можно многое закрыть, особенно если сайт простой. Ещё добавляю X-Content-Type-Options и X-Frame-Options — реально минимальный набор для спокойствия. Странно, что многие забывают про Strict-Transport-Security, а это ключ к HTTPS. В целом, такой набор уже даёт красивую защиту без заморочек.