Методология

Что именно мы проверяем, как считается оценка и — не менее важно — что мы не проверяем.

Как проходит скан

DeployGuard работает снаружи — так же, как любой посетитель. Мы открываем сайт, загружаем HTML и JavaScript, переходим по публичным ссылкам и смотрим заголовки ответов. Мы никогда не просим доступ к репозиторию, учётные данные или VPN внутрь вашей инфраструктуры.

Пассивный скан работает на любом сайте: он читает только то, что уже отдаётся каждому посетителю. Первый пассивный скан бесплатный.

Полный скан запускается только на домене, который вы подтвердили (файл или мета-тег на сайте). Он добавляет активные проверки: отправляет запросы приложению и смотрит на реакцию.

51 проверка

19 проверок работают в обоих режимах, ещё 32 — только в полном скане.

Секреты и ключи (пассивный + полный)

API-ключи OpenAI, Anthropic, Groq, Stripe, Resend, Brevo, HuggingFace, Pinecone; сервисные аккаунты Firebase; Supabase service_role; строки подключения к БД с паролями; приватные ключи — ищем в HTML, JS-бандлах и source maps.

Клиентский код (пассивный + полный)

XSS-паттерны (dangerouslySetInnerHTML, v-html, innerHTML, eval, document.write), токены в localStorage, анализ JWT (alg none, слабый секрет, нет срока действия, админ-флаги), fail-open auth (catch, который пропускает запрос), log injection, поверхности SQL-инъекций и SSRF, упоминания AI-инструментов.

Гигиена веба (пассивный + полный)

Content-Security-Policy и её слабые директивы, HSTS, X-Content-Type-Options, защита от clickjacking, Referrer-Policy, Permissions-Policy, флаги cookie (Secure, HttpOnly, SameSite), CORS с credentials, open redirect, mixed content, SRI для внешних скриптов, раскрытие версий.

Базы и хранилища (полный)

Supabase RLS по таблицам, публичные бакеты Supabase Storage, Firebase Realtime Database, Firestore, Firebase Storage, бакеты S3 и GCS с публичным листингом.

AI-поверхность (полный)

Поиск AI-эндпоинтов, prompt injection, jailbreak, утечка system prompt, AI-mediated XSS, excessive agency (tool calling), поверхности indirect-инъекций (загрузка файлов, RAG и векторные хранилища).

Открытые данные (полный)

Открытые .env и .git, дампы бэкапов, админ-панели, Swagger и OpenAPI, GraphQL introspection, API без авторизации, path traversal, опасные HTTP-методы, debug-страницы, stack trace и SQL-ошибки, Host header injection, cache poisoning, скрытые debug-параметры.

Инфраструктура и цепочка поставок (полный)

Качество TLS (устаревшие версии и шифры, HSTS preload), редирект HTTP→HTTPS, перечисление поддоменов через Certificate Transparency, subdomain takeover, slopsquatting (пакеты, выдуманные AI, которых нет в npm), уязвимые зависимости из package.json по базе OSV, CVE Next.js и проверка «а оно вообще работает» на страницах приложения и форме входа.

Что мы НЕ проверяем

Этот список важнее предыдущего: он определяет границы того, что означает отчёт.

Чистый отчёт означает «за короткий автоматический проход снаружи не найдено известных классов проблем». Он не означает «приложение безопасно». Ни один сканер не может честно это обещать.

Как считается оценка 0–10

У каждой находки есть критичность:

Баллы суммируются по типу проверки, и один тип даёт не больше 50 баллов — иначе сто копий одной мелкой проблемы перевесили бы реальную картину. Оценка = 10 − сумма/10, после чего применяется потолок:

Потолки нужны потому, что высокая оценка рядом с открытой базой была бы обманом.

Уверенность, ложные срабатывания и доказательство

У каждой находки есть уровень уверенности. Высокая означает, что мы видели реальное доказательство: ключ лежал в бандле, таблица вернула строки, заголовка не было.

В находках HIGH и CRITICAL есть команда, которой можно воспроизвести проблему самостоятельно. Если не воспроизводится — нажмите «Ложное»: находка запоминается по отпечатку (тип, заголовок и место) и скрывается в следующих отчётах, не скрывая другие проблемы того же типа в других местах.

Правовые границы

Мы сканируем только сайты, которые вам принадлежат или на проверку которых у вас есть явное разрешение. Полный скан требует подтверждения владения доменом, и оно истекает: через 30 дней подтверждаете заново. Системы в подсанкционных юрисдикциях не сканируем.

Вопросы по конкретной проверке — support@deployguard.app.