Примеры отчётов
Как выглядят результаты аудита. Примеры составлены на основе типичных находок из разных проектов.
Отчёт для руководства
Краткое резюме на 1-2 страницы для принятия решения по сделке. Без технических деталей.
Ключевые риски
- Критический Уязвимости в системе аутентификации — возможен несанкционированный доступ к аккаунтам
- Критический Отсутствие автоматических тестов — любое изменение может сломать работающий функционал
- Высокий Финансовая логика реализована частично — ключевые операции существуют только в виде заглушек
- Высокий Зависимость от одного разработчика — 80% кода написано одним человеком
Состояние по областям
Рекомендация
При текущем состоянии инвестирование связано с высокими техническими рисками. Рекомендую либо отложить сделку до устранения критических проблем, либо учесть в оценке стоимость доработки: ориентировочно 3-4 месяца работы команды из 3-4 разработчиков.
Сводный отчёт
Обзор всех аспектов проекта с детализацией по каждому направлению.
Прогресс разработки
Заявленный срок до запуска: 8 недель. Фактическое состояние: выполнено 35-40% от плана.
Реалистичный срок до production-ready: 16-20 недель при текущей команде.
Анализ сметы
Заявленная смета: 8 500 часов. Результаты проверки:
Выявлено: дублирование задач (управление пользователями описано в 3 разделах), завышенные оценки на типовые операции (CRUD-операции по 40-60 часов), шаблонные оценки без учёта сложности.
Команда
| Размер команды | 6 человек (4 разработчика, 1 тестировщик, 1 PM) |
| Bus factor | 1 — критическая зависимость от ведущего разработчика |
| Code review | Проводится, но формально (среднее время ревью < 5 минут) |
| Документация | API задокументирован, архитектурная документация отсутствует |
Технические проблемы
Детальный список находок с приоритизацией, примерами кода и рекомендациями.
Сводка по критичности
Небезопасная генерация токенов сессий
Проблема: Для генерации токенов сессий используется Math.random(), который не является криптографически стойким. Токены предсказуемы.
const token = Math.random().toString(36).substring(2);
import { randomBytes } from 'crypto';
const token = randomBytes(32).toString('hex');
Риск: Злоумышленник может предсказать токены других пользователей и получить доступ к их аккаунтам.
Оценка исправления: 1-2 часа
SQL-инъекция в поиске
Проблема: Пользовательский ввод подставляется в SQL-запрос без экранирования.
const query = `SELECT * FROM products WHERE name LIKE '%${searchTerm}%'`;
Риск: Полный доступ к базе данных, включая данные пользователей и платежей.
Оценка исправления: 2-3 часа
Отсутствие rate limiting на API
Проблема: API не ограничивает количество запросов. Возможны brute-force атаки на авторизацию и DDoS.
Рекомендация: Внедрить rate limiting (например, 100 запросов в минуту для авторизации, 1000 для обычных эндпоинтов).
Оценка исправления: 4-8 часов
Полное отсутствие автоматических тестов
Проблема: В проекте 0 файлов с тестами. Код покрытия: 0%.
Риск: Любое изменение может сломать существующий функционал. Рефакторинг невозможен без ручного регрессионного тестирования.
Рекомендация: Начать с интеграционных тестов критичных сценариев (авторизация, платежи, основные бизнес-операции).
Оценка исправления: 80-120 часов для базового покрытия
Захардкоженные конфигурационные значения
Проблема: URL-адреса сервисов, таймауты и лимиты указаны прямо в коде, а не в конфигурации.
Риск: Сложность развёртывания в разных окружениях, риск случайного использования production-данных в dev-окружении.
Оценка исправления: 8-16 часов
Полный отчёт содержит детальное описание всех 30 находок с примерами кода, ссылками на строки и рекомендациями по исправлению.
Нужен аудит вашего проекта?
Расскажите о сделке — обсудим, что именно нужно проверить.
Обсудить проект