Заголовки безопасности — HTTP-заголовки ответа, которые инструктируют браузеры применять политики безопасности, защищая веб-приложения от XSS, кликджекинга, сниффинга типов MIME и других распространённых атак с минимальными усилиями по реализации. По данным Mozilla Web Security Observatory, только 35% веб-сайтов правильно реализуют Content Security Policy (CSP), а 45% не имеют HTTP Strict Transport Security (HSTS). По данным OWASP, отсутствующие или неправильно настроенные заголовки безопасности ответственны примерно за 30% уязвимостей безопасности веб-приложений, обнаруженных при тестировании на проникновение. Для QA-инженеров автоматизированное тестирование заголовков безопасности с инструментами Mozilla Observatory или Playwright обеспечивает воспроизводимую проверку.
TL;DR: Проверяй 8 критических заголовков безопасности: Content-Security-Policy, Strict-Transport-Security (HSTS), X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Resource-Policy и Cross-Origin-Opener-Policy. Используй Mozilla Observatory, SecurityHeaders.com или автоматизированные тесты в CI/CD. Стремись к оценке A+ в Mozilla Observatory.
Основные Заголовки
1. Content-Security-Policy (CSP)
Content-Security-Policy: default-src 'self'; script-src 'self'
2. Strict-Transport-Security (HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains
3. X-Frame-Options
X-Frame-Options: DENY
“Security headers are the easiest security wins a web team can implement — CSP, HSTS, and X-Frame-Options take an hour to configure but protect against entire classes of attacks that take years to discover in code.” — Yuri Kan, Senior QA Lead
Тестирование
def test_security_headers():
response = requests.get("https://example.com")
assert 'Content-Security-Policy' (как обсуждается в [OWASP ZAP Automation: Security Scanning in CI/CD](/ru/blog/owasp-zap-automation)) in response.headers
assert 'Strict-Transport-Security' (как обсуждается в [Penetration Testing Basics for QA Testers](/ru/blog/penetration-testing-basics)) in response.headers
assert 'X-Frame-Options' in response.headers
Инструменты
- SecurityHeaders.com
- Mozilla Observatory
- Пользовательские скрипты
Реализация
Node.js
const helmet = require('helmet');
app.use(helmet());
Nginx
add_header Content-Security-Policy "default-src 'self'" always;
add_header Strict-Transport-Security "max-age=31536000" always;
Заключение
Security headers — критически важный защитный слой. Регулярное тестирование обеспечивает правильную реализацию и защиту от распространенных веб-уязвимостей.
FAQ
Какие security headers нужно внедрить в первую очередь?
Начни с Strict-Transport-Security (HSTS) для принудительного HTTPS, Content-Security-Policy (CSP) для предотвращения XSS-атак и X-Frame-Options со значением DENY для блокировки кликджекинга. Эти три заголовка защищают от наиболее распространённых векторов атак. Затем добавь X-Content-Type-Options: nosniff и Referrer-Policy: strict-origin-when-cross-origin. Стремись к оценке A+ в Mozilla Observatory как ориентиру.
Как тестировать security headers в CI/CD пайплайне?
Добавь автоматические проверки заголовков в CI/CD с помощью pytest и библиотеки requests для валидации каждого заголовка. Как альтернативу используй API SecurityHeaders.com или Mozilla Observatory для автоматической оценки. Запускай проверки на staging-окружении после каждого деплоя. Ставь пайплайн в fail, если критические заголовки вроде HSTS или CSP отсутствуют или неправильно настроены.
Что такое Content Security Policy и почему его сложно внедрить?
Content Security Policy (CSP) — HTTP-заголовок, который указывает браузерам, какие источники контента разрешены на странице, эффективно предотвращая XSS-атаки. Его сложно внедрить, потому что слишком строгий CSP ломает легитимный функционал (inline-скрипты, сторонние виджеты), а слишком мягкий даёт мало защиты. Начни с CSP в режиме report-only для выявления нарушений без поломки сайта, затем постепенно ужесточай директивы.
Нужно ли удалять заголовки X-Powered-By и Server?
Да, всегда удаляй или минимизируй заголовки, раскрывающие информацию. X-Powered-By выдаёт стек технологий (PHP, Express), а детальный Server-заголовок раскрывает версию веб-сервера (Apache/2.4.51). Атакующие используют эту информацию для нацеливания на известные уязвимости конкретных версий. В Nginx установи server_tokens off. В Express используй middleware helmet, который удаляет X-Powered-By по умолчанию.
Официальные ресурсы
See Also
- API Security Testing: Полное Руководство по OAuth, JWT и API Keys - Тестирование безопасности API: OAuth потоки, валидация JWT,…
- Lighthouse Performance Testing: Мастерство Core Web Vitals - Веб-производительность с Lighthouse: Core Web Vitals (LCP, FID,…
- Burp Suite для QA-Инженеров: Полное Руководство по Security Testing - Security testing с Burp: настройка proxy, scanner, intruder,…
- Database Performance Testing: Оптимизация Запросов - Тестирование оптимизации БД: производительность запросов,…
