Перевірка заголовків безпеки

Вставте заголовки відповіді сторінки —curl -sI https://your-site.example/у терміналі або блок із панелі Network браузера — і отримайтеОцінка від A+ до Fза списком OWASP Secure Headers:Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, захист від фреймів,Referrer-Policy, Permissions-Policy, трійка ізоляції cross-origin, витоки версій, застарілі заголовки і прапорці cookie — кожна знахідка з точнимnginx, Apache і Expressрядки, що це виправляють. Усе працює у вашому браузері; сторінка ніколи не звертається до вашого сайту.
Рядок статусу необов'язковий. Усі рядки Set-Cookie перевіряються. Щоб мати політику для оцінки взагалі, створіть її на генераторі CSP; щоб розібрати блок заголовків рядок за рядком, використовуйте парсер HTTP-заголовків.
Оцінки ще немає. Вставте заголовки відповіді і натисніть Перевірити заголовки або завантажте зразок.
Рядки виправлення для кожної знахідки з'являються тут після перевірки.
Обсяг цієї перевірки порівняно з перевіркою безпеки SSL. Ця сторінка оцінює заголовки відповіді безпеки (список OWASP вище). Перевірка безпеки SSL оцінює вашу конфігурацію HTTPS: ланцюжок сертифікатів, версії протоколів, силу шифрів і змішаний вміст. HSTS і прапорці cookie з'являються на обох сторінках, бо обидва списки їх включають, але з різних ракурсів — запустіть обидві перевірки для повної картини.
Самоперевірка
Перезапускає оцінювача на фіксованих блоках заголовків: добрий зразок на A+, поганий на F з усіма спрацьованими відрахуваннями, кожне правило окремо (арифметика оцінки), обмеження витоку версій, рекомендації щодо cookie, нотатки про якість CSP, frame-ancestors як захист від фреймів, пороги оцінок з обох боків кожної межі, фрагменти виправлень і негативні шляхи. Нічого нікуди не надсилається.
Що таке заголовки безпеки?
Одним реченням: заголовки безпеки — це заголовки відповіді, які вказують браузеру застосувати захист, якого він не може визначити сам: ніколи не завантажувати скрипти з невідомих джерел, ніколи не говорити з цим хостом знову простим HTTP, ніколи не вбудовувати цю сторінку у фрейм — і кожен коштує один рядок конфігурації.
Заголовки, які оцінює ця сторінка
ЗаголовокЗахищає відРекомендоване OWASP значення
Strict-Transport-Securityпониження протоколу і викрадення cookie на першому запиті простим HTTPmax-age=63072000; includeSubDomains
Content-Security-Policyміжсайтовий скриптинг, зловмисні вбудування, змішаний вмістdefault-src 'self'; form-action 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests
X-Content-Type-Optionsплутанина MIME (скрипт, відданий як зображення)nosniff
X-Frame-Options / CSP frame-ancestorsклікджекінг (вашу сторінку вбудовано в фрейм зловмисника)deny / 'none'
Referrer-Policyвитік URL (з токенами) стороннім сайтамno-referrer
Permissions-Policyсторінки і вбудування тихо використовують камеру, мікрофон, геолокаціюусі функції вимкнено
Cross-Origin-Opener-Policyінші вікна, що дістаються до вашого контексту переглядуsame-origin
Cross-Origin-Embedder-Policyзавантаження ресурсів, які не погодились на це (вмикає ізоляцію процесів)require-corp
Cross-Origin-Resource-Policyваші ресурси, вбудовані іншими сайтамиsame-origin
Як обчислюється оцінка

Починайте зі 100 і віднімайте: −25 за відсутній CSP, −20 за відсутній HSTS, −10 кожен за відсутній X-Content-Type-Options, Referrer-Policy або будь-який захист від фреймів, −5 кожен за трійку cross-origin і Permissions-Policy, −5 за витоки версій у Server/X-Powered-By (з обмеженням), і −5 за ненульовий X-XSS-Protection. Буквені оцінки: 100 = A+, 90+ = A, 80+ = B, 70+ = C, 60+ = D, нижче — F. Рекомендаційні примітки (прапорці cookie, керування кешем, якість CSP) не віднімаються.

Типові помилки
  • Встановлення заголовків на неправильних відповідях. Додавайте їх на кожну відповідь, включно зі сторінками помилок і перенаправленнями — саме для цього always у add_header ... always; (nginx) і Header always set (Apache).
  • Перевірка лише головної сторінки. Проксі, кеші й старі застосунки часто знімають або перевизначають заголовки лише на деяких шляхах. Перевіряйте сторінки, що мають значення: вхід, оформлення, кінцеві точки API.
  • Збереження X-XSS-Protection. Аудитор, яким він керував, сам викликав вразливості; браузери його прибрали. Ненульове значення тепер навмисно коштує балів — приберіть його і дозвольте CSP виконати роботу.
  • Віра, що X-Frame-Options актуальний. Він не може дозволяти конкретні джерела і не входить до стандарту CSP; сучасна заміна — frame-ancestors. Тримати обидва під час переходу нормально — ця сторінка приймає будь-який.
  • Відправлення банерів версій. Server: Apache/2.4.58 (Unix) звужує пошук зловмисника відомих помилок без жодної користі для вас. Приберіть версію; тримайте кількість рядків низькою.
Часті запитання (FAQ)

Чому COOP/COEP/CORP варті лише по 5 балів? Трійка — найновіший шар, потрібний переважно там, де ви хочете ізоляцію процесів (SharedArrayBuffer, захист від Spectre). Сайт без них усе ще має основні захисти; з ними деякі вбудовування між джерелами потребують коригування — тому вони важать менше, ніж CSP чи HSTS.

Чи означає висока оцінка, що сайт безпечний? Ні — це означає, що заголовки відповіді встановлені. Заголовки безпеки — один шар: конфігурація TLS, обробка сесій, перевірка введення і патчі все ще вирішують, чи сайт справді безпечний. Запустіть Перевірку безпеки SSL для шару TLS.

Чому моє значення Permissions-Policy таке довге? Базовий рівень OWASP явно вимикає кожну функцію, тож коли браузер додає нові функції, вони не вмикаються мовчки. Коротке значення на кшталт camera=(), microphone=(), geolocation=() — початок; просто знайте, що воно лишає увімкненим.

Чи можна перевірити заголовки будь-якого сайту звідси? Ця сторінка ніколи не робить мережевих запитів — вона оцінює саме той текст, який ви вставляєте, тож працює за брандмауерами і на внутрішніх хостах, і нічого з перевіреного вами не покидає ваш комп'ютер. Отримати заголовки можна однією командою curl -sI у терміналі.

А що з Clear-Site-Data і X-Permitted-Cross-Domain-Policies? Корисні у вузьких сценаріях (відповіді на вихід; застарілі переглядачі PDF/Flash). Тут вони рекомендаційні, не оцінюються — надсилання Clear-Site-Data на кожну відповідь стирало б сховище користувачів при кожному завантаженні сторінки.