HTTP Headers
Перегляд response-headers і аудит security-policies.
-
HSTS is set with a long max-age — browsers will refuse plaintext HTTP for the next 6+ months.max-age=31536000; includeSubdomains; preload
-
CSP is set with reasonable defaults — script and style sources are restricted.default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net productionresultssa1.blob.core.windows.net productionresultssa2.blob.core.windows.net productionresultssa3.blob.core.windows.net productionresultssa4.blob.core.windows.net productionresultssa5.blob.core.windows.net productionresultssa6.blob.core.windows.net productionresultssa7.blob.core.windows.net productionresultssa8.blob.core.windows.net productionresultssa9.blob.core.windows.net productionresultssa10.blob.core.windows.net productionresultssa11.blob.core.windows.net productionresultssa12.blob.core.windows.net productionresultssa13.blob.core.windows.net productionresultssa14.blob.core.windows.net productionresultssa15.blob.core.windows.net productionresultssa16.blob.core.windows.net productionresultssa17.blob.core.windows.net productionresultssa18.blob.core.windows.net productionresultssa19.blob.core.windows.net github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com wss://production-copilot-host.webpubsub.azure.com edge.fullstory.com rs.fullstory.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com www.youtube-nocookie.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com user-images.githubusercontent.com private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com explore-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com images.ctfassets.net/8aevphvgewt8/; manifest-src 'self'; media-src github.com user-images.githubusercontent.com secured-user-images.githubusercontent.com private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com assets.ctfassets.net/8aevphvgewt8/ videos.ctfassets.net/8aevphvgewt8/; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
-
Clickjacking is blocked — page cannot be embedded in third-party iframes.deny
-
pass X-Content-Type-Options +10/10nosniff is set — browsers will not MIME-sniff non-script responses as JavaScript.nosniff
-
Referrer policy leaks parts of the URL cross-origin — switch to strict-origin-when-cross-origin.origin-when-cross-origin, strict-origin-when-cross-origin
-
No Permissions-Policy — third-party iframes can request sensitive features without restriction.
Що означає кожне поле?
Опис полів
Оцінка безпеки
Сумарний бал по заголовках безпеки, де HSTS і CSP важать найбільше. A+ — усі п'ять заголовків правильно налаштовані; F — жодного. Використовуйте оцінку як швидкий маркер, далі — деталі по кожному заголовку нижче.
HTTP-протокол
HTTP/1.1 — текстовий legacy-протокол. HTTP/2 мультиплексує стріми по одному TCP-з'єднанню (стиснення заголовків, server push). HTTP/3 — поверх QUIC (UDP), краще на нестабільних/мобільних мережах. Сучасний сервер має віддавати щонайменше HTTP/2.
Затримка
Round-trip від нашого сервера до цілі до першого байта відповіді. Це не CDN-бенчмарк — географічна відстань, TLS handshake і прогрів кешу всі впливають. Використовуйте як грубий сигнал свіжості, а не як production-метрику.
Ланцюжок редиректів
Довгий ланцюжок (3+ редиректи) шкодить SEO й перформансу. Класичний випадок — <code>http://example.com → https://example.com → https://www.example.com</code>: два стрибки, прийнятно. Більше п'яти — конфігураційна помилка.
Strict-Transport-Security (HSTS)
HSTS каже браузеру: "більше не з'єднуйся зі мною по plain HTTP". <code>max-age=15768000</code> (6 місяців) — практичний мінімум; <code>includeSubDomains; preload</code> опціонально включає у глобальний preload-list. Після preload не можна "вийти" протягом ~12 місяців — спершу налаштуйте все інше.
Content-Security-Policy (CSP)
CSP визначає, звідки можуть вантажитися script / style / image / frame. <code>default-src 'self'</code> — здоровий baseline; nonce-based <code>script-src</code> — найжорсткіший варіант. Уникайте <code>unsafe-inline</code> і <code>unsafe-eval</code> — вони нівелюють захист від XSS. Використовуйте report-uri / report-to для моніторингу.
X-Frame-Options
Поставте <code>DENY</code>, щоб заборонити фрейми взагалі, або <code>SAMEORIGIN</code> для дозволу лише same-origin. Сучасний еквівалент — <code>frame-ancestors</code> у CSP (багатше синтаксис) — будь-який із двох задовольняє наш audit.
Referrer-Policy
Контролює, що браузер шле у <code>Referer</code>. <code>strict-origin-when-cross-origin</code> (дефолт у сучасних браузерах) — гарний baseline: повний URL для same-origin, лише origin для cross-origin, нічого при downgrade. <code>no-referrer</code> прибирає взагалі; <code>unsafe-url</code> ллє повні URL — уникайте.
Permissions-Policy
Спадкоємець Feature-Policy. Дозволяє дозволити / заборонити браузерні API per-origin: <code>camera=(), microphone=(), geolocation=(self)</code>. Радше defense-in-depth; примусово застосовується до iframe — безпечніша поведінка для вбудованого контенту.
X-Content-Type-Options: nosniff
Без цього заголовка браузер може виконати JSON-відповідь як JavaScript, якщо "виглядає як код". <code>X-Content-Type-Options: nosniff</code> робить декларований Content-Type обов'язковим. Дешевий заголовок, завжди безпечно ввімкнути — немає вагомих причин не ставити.
Про цей інструмент
HTTP Headers завантажує вашу URL справжнім HTTPS-запитом, захоплює кожен заголовок у відповіді (та кожній проміжній відповіді на будь-якому redirect-ланцюзі) і прогонить результат через security-аудит, що покриває сучасні hardening-заголовки: Strict-Transport-Security, Content-Security-Policy, X-Frame-Options / CSP frame-ancestors, X-Content-Type-Options, Referrer-Policy та Permissions-Policy. Кожен заголовок перевіряється на присутність, осмисленість значення і best-practice-пропуски.
Окрім аудиту ми перелічуємо кожен заголовок дослівно, щоб ви могли підтвердити caching-політику (Cache-Control, ETag, Vary), CDN-трасування (CF-Ray, X-Cache, X-Served-By), компресію (Content-Encoding: br/gzip) та будь-які кастомні заголовки, що видає ваш стек. HTTP-метод (GET або HEAD), узгоджена HTTP-версія (HTTP/1.1, HTTP/2, HTTP/3) і TLS-версія повідомляються в request-барі.
Коли використовувати цей інструмент
- Security-hardening. Перед запуском підтвердіть, що HSTS, CSP та решта виставлені з безпечними значеннями — Mozilla Observatory baseline як мінімум.
- Cache-дебаг. Подивіться, який саме
Cache-ControlіVaryвидає ваш CMS чи фреймворк — типова причина «стара версія застрягла». - Аудити redirect-ланцюгів. Виявляйте випадкові 302-then-301 ланцюги, HTTP-to-HTTPS-to-other-host петлі та брак канонікалізації.
- Поведінка CDN. Підтвердіть, що Cloudflare/Fastly/CloudFront справді кешує те, що ви думаєте, прочитавши
Age,X-Cacheта CDN-специфічні заголовки.
Що покриває наш security-аудит
Для кожного з шести hardening-заголовків ми повідомляємо: присутній чи відсутній, фактичне значення та короткий вердикт («good», «needs tightening», «vulnerable»). HSTS безincludeSubDomains, CSP з unsafe-inline або Referrer-Policy за дефолтом — маркуються. Ми ніколи не кажемо «ідеальну» політику, бо кожен сайт інший, але кажемо, які крутилки досі на заводських налаштуваннях.
Часті запитання
Що таке HSTS і чому це важливо?
max-age (зазвичай 31536000 = 1 рік), він запобігає SSL-stripping-атакам на наступних візитах. Додавання includeSubDomains розширює захист на кожен субдомен — сильний дефолт для більшості сайтів, але переконайтеся, що всі вони справді підтримують HTTPS.
Моя CSP відсутня — наскільки це небезпечно?
default-src 'self' блокує найпоширеніші XSS-payloads (inline-скрипти, зовнішні script-завантаження) за майже нульовою ціною. Жорсткіші політики, що повністю забороняють inline-скрипти, вимагають рефакторингу, але дають значно сильніший захист.
Чи слідуєте за редиректами?
Чому інструмент показує HTTP/2, навіть коли я налаштував HTTP/3?
Alt-Svc-заголовок на першому коннекті. Наш checker використовує HTTP/2 over TCP за замовчуванням, як і більшість HTTP-клієнтів сьогодні; якщо ваш сервер анонсує HTTP/3 в Alt-Svc, ви побачите цей заголовок у результаті, але сама відповідь усе одно йде по HTTP/2. Присутність Alt-Svc — це правильна річ, на яку дивитись.