Skip to content
EN

Методология · Открытая формула

Методология Health Score v2.3

Открытая формула 0–100: шесть категорий, 120 «сырых» баллов, нормализация.

Кратко. Health Score 0–100 (v2.3) складывается из шести категорий на 120 «сырых» баллов, приведённых к 0–100: 30 — заголовки безопасности, 25 — SSL/TLS, 25 — производительность (время ответа, сжатие, заголовки кэширования, HTTP/2), 20 — практики (HTTPS, скрытые Server и X-Powered-By, ответ 2xx, Content-Type, нет смешанного контента), 10 — флаги cookie и 10 — сила CSP (тот же грейдер, что в инструменте /csp). Балл считает src/health-score.php; каждый вес и порог формулы на этой странице берётся из таблицы, которую тест сверяет с этим файлом.
Заголовки30SSL/TLS25Скорость25Практики20Cookies10CSP10
История версий. 2026-10-05, та же v2.3 — изменилось, где применяется формула, а не она сама: /api/v3/health и /api/v4/health теперь считают её же. До этого они считали только первые четыре категории (без Cookies и CSP, без зачёта frame-ancestors, без нормализации) и принимали HTTP/1.1 за HTTP/2. v2.3 (2026-10-05) — имя хоста сверяется по правилам браузеров: *.example.com только на одну метку, CN не учитывается (см. SSL/TLS Grade v1.2). v2.2 (2026-10-05) — формула не менялась, исправлено её описание. С публикации страница описывала формулу, которую движок не считал: производительность — это полное время ответа (10) + сжатие (5) + заголовки кэширования (5) + HTTP/2 (5), а не TTFB (15) + размер ответа (5) + редиректы (5); практики — HTTPS 5, скрытые Server/X-Powered-By 4, ответ 2xx 4, Content-Type 3, нет смешанного контента 4, а не HTTPS 8 + статус 6 + Content-Type 3 + сжатие 3; «валидный сертификат» проверяет сроки, имя хоста и запас больше 30 дней — цепочку и отзыв не проверяет, — а при запасе 30 дней и меньше даёт 6; SameSite засчитывается только со значением; буквы — A+ от 95, A от 85, B от 70, C от 50, D от 30, а не 90/80/70/60/50. v2.1 (2026-10-04) — 4 балла строки X-Frame-Options засчитываются и по CSP frame-ancestors: первая директива frame-ancestors в действующей политике (читаются все заголовки Content-Security-Policy, Report-Only не считается), которая не пускает любой сайт — нет «*», «*»-хоста, голой схемы; пустой список — 'none'. v2.0 (2026-06-02) — добавлены категории Cookies (10 баллов) и качество CSP (10 баллов); итоговое число 0–100 теперь нормализация 120 «сырых» баллов, поэтому оценки немного сдвинулись относительно v1.0. v1.0 (2026-05-05) — исходная формула из четырёх категорий (security headers, SSL/TLS, производительность, best practices).

1. Заголовки безопасности — 30 баллов

ЗаголовокВес
Strict-Transport-Security (HSTS)6
Content-Security-Policy (действующая)6
X-Content-Type-Options4
X-Frame-Options или CSP frame-ancestors4
Referrer-Policy3
Permissions-Policy3
X-XSS-Protection2
Cross-Origin-Opener-Policy2

Заголовок, который есть в последнем ответе после всех редиректов, даёт полный вес; значение здесь не оценивается (сила политики CSP оценивается в категории 6). Заголовок Content-Security-Policy-Report-Only в этой строке не засчитывается. Строку X-Frame-Options закрывает и ограничивающая директива CSP frame-ancestors (v2.1).

2. SSL/TLS — 25 баллов

  • 10 — сертификат действует: срок начался и не истёк, имя хоста есть в SAN (так, как проверяют браузеры, — методология SSL/TLS v1.2), до истечения больше 30 дней; 6, если осталось 30 дней или меньше; 0, если истёк, ещё не начался или выдан на другое имя
  • 5 — имя хоста есть в SAN; CN не учитывается
  • 5 — до истечения больше 30 дней; 3 при 8–30 днях; 0 при 7 и меньше
  • 5 — соединение установлено по TLS 1.2 или TLS 1.3

Категория считается, только если итоговый адрес — HTTPS и TLS-проба ответила; иначе теряются все 25 баллов. Проба соединяется без проверки цепочки, поэтому ни цепочка доверия, ни отзыв (OCSP/CRL) на эти баллы не влияют — инструмент /ssl показывает их отдельно. Опорный стандарт: Mozilla Server-Side TLS Guidelines.

3. Производительность — 25 баллов

  • 10 — время ответа меньше 500 мс; 7 — меньше 1000 мс; 4 — меньше 2000 мс; 0 — от 2000 мс
  • 5 — ответ сжат (есть заголовок Content-Encoding)
  • 5 — есть заголовок кэширования: Cache-Control, ETag или Expires
  • 5 — отдельный запрос к адресу договаривается о HTTP/2 или HTTP/3

Время ответа — полное время запроса со всеми редиректами и загрузкой тела (до 2 МБ), измеренное с нашего сервера, а не TTFB. Размер страницы и число редиректов отдельно не оцениваются.

4. Практики — 20 баллов

  • 5 — итоговый адрес — HTTPS
  • 4 — нет ни Server, ни X-Powered-By; 2, если есть только Server; 0, если есть X-Powered-By
  • 4 — итоговый ответ — 2xx
  • 3 — есть заголовок Content-Type
  • 4 — нет смешанного контента: в первых 200 КБ HTTPS-страницы нет src, href или action со ссылкой http:// (страница по HTTP не проверяется и эти баллы сохраняет)

5. Cookies — 10 баллов

  • 4 — HttpOnly
  • 4 — Secure
  • 2 — SameSite со значением Strict, Lax или None

Каждый флаг даёт свой вес, умноженный на долю cookie первого ответа, у которых он есть, с округлением: две из трёх cookie с HttpOnly дают round(2/3 × 4) = 3. Сайт, который не ставит cookie в первом ответе, получает все 10.

6. CSP — 10 баллов

  • 10 / 8 / 6 / 4 / 2 — CSP-политика с оценкой A / B / C / D / F
  • 0 — политики Content-Security-Policy нет

Буква берётся из того же грейдера, что и отдельный CSP Analyzer (src/csp-analyze.php). Если действующей политики нет, оценивается Report-Only — с соответствующим замечанием.

Нормализация

Шесть категорий дают 120 «сырых» баллов. Публикуемый балл 0–100 — это round(raw / 120 × 100) с зажимом в 0–100.

Буквенная оценка

round(raw / 120 × 100)

БаллыОценка
95–100A+
85–94A
70–84B
50–69C
30–49D
0–29F

Где ещё показывается «health»

Бейдж Health (/badges), публичный отчёт /report/{домен}/health и каталог «Проверено Enterno» показывают не этот балл, а облегчённый — из HEAD-запроса и TLS-рукопожатия: HTTPS отвечает 2xx/3xx — 40; каждый из шести заголовков (HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy) — 5; TLS-рукопожатие — 30; не больше 100. Буквы бейджа: A от 90, B от 80, C от 70, D от 60, E от 50, F ниже.

API /api/v3/health и /api/v4/health считают ту же формулу, что /health: тот же движок (src/health-score.php), то же число и та же буква для одного и того же ответа сайта, и с каждым баллом — methodology_version.

Версионирование

Текущая версия — v2.3, обновлена . Движок (src/health-score.php) возвращает ту же версию с каждым баллом, в поле methodology_version. Каждое изменение опубликованной формулы — весов или их описания — новая версия со строкой в истории выше.

Запустить проверку →

Калькулятор

Отметьте, что отдаёт ваш сайт, — балл считается по тем же правилам, что и проверка /health. Сеть калькулятор не трогает: состояния вы задаёте сами.

1. Заголовки безопасности
2. SSL/TLS
3. Производительность
4. Практики
5. Cookies
--
A


  
Проверить мой сайт →