5
/10
Прожарка: emailflare
Оценка: 5/10
Критично
- [⚠ МНЕНИЕ] Dockerfile (стр. 6, 15, 54) – пакеты устанавливаются без фиксированных версий. При каждом билде образ может «раздуться» и, что хуже, в продакшн‑окружении может появиться уязвимая библиотека.
- [⚠ МНЕНИЕ] Dockerfile (стр. 22‑34) – вместо
WORKDIRиспользуется цепочкаcd … && …. При падении любой команды текущая директория теряется, а последующиеRUNработают в корне, что ломает кэширование и усложняет отладку. - [⚠ МНЕНИЕ] start.sh (стр. 5‑11, 111) – переменные без кавычек, что открывает путь к неожиданному разбору glob‑ов и подстановке слов. При передаче пользовательского пути скрипт может выполнить лишние команды.
- [✓ ФАКТ: Код-Рентген] Уязвимости npm‑зависимостей –
axios,fast-uriиhonoсодержат CVE с высоким и средним уровнем риска (прототип‑поллюция, обход ограничений тела запроса, XSS в JSX). Ни один из пакетов не обновлён до безопасных версий, а автоматическое обновление отключено.
Надо переделать
- [⚠ МНЕНИЕ] Pin‑версий – добавить
apk add <pkg>=<ver>иnpm install <pkg>@<ver>во всех Dockerfile, чтобы гарантировать воспроизводимость и отсутствие известных уязвимостей. - [⚠ МНЕНИЕ] WORKDIR – вынести
WORKDIR /appв начале Dockerfile и удалить всеcd … &&. Это ускорит сборку и сделает слои предсказуемыми. - [✓ ФАКТ: Баш-Прокурор] Кавычки в shell‑скриптах – обернуть все переменные в двойные кавычки, включить
set -euo pipefailдля надёжного завершения при ошибке. - [⚠ МНЕНИЕ] Обновление зависимостей – выполнить
npm audit fixи вручную заменить уязвимые пакеты на версии без CVE (например,axios@1.6.8,fast-uri@2.2.0,hono@4.2.1). - [✓ ФАКТ: Докер-Дед] CI‑pipeline – добавить шаг
npm ci && npm auditи проверкуhadolintс флагом--fail-on WARN, чтобы сборка падала при новых предупреждениях.
Мелочи
- [⚠ МНЕНИЕ] Лишние файлы – в корне присутствует
Dockerfile.mesahub, который не используется в CI и не упоминается в README. Удалить или перенести в отдельный пример. - [⚠ МНЕНИЕ] README – описывает запуск через
docker compose up, но вdocker-compose.ymlуказаны устаревшие теги образов (latest). Лучше фиксировать теги. - [⚠ МНЕНИЕ] Линтер‑исключения – в
.dockerignoreотсутствуетnode_modules, из‑за чего каждый билд копирует гигантскую директорию, замедляя процесс.
Что хорошо
- [⚠ МНЕНИЕ] Структура проекта – есть отдельные директории
src/,config/иscripts/, что упрощает навигацию. - [⚠ МНЕНИЕ] Логика отправки писем – реализована через
hono‑router, поддерживает несколько эндпоинтов (/send,/status). Код роутера лаконичен, использует async/await без «callback‑ад‑хок». - [⚠ МНЕНИЕ] Документация – README подробно описывает переменные окружения, пример
.env.exampleи шаги локального тестирования. - [⚠ МНЕНИЕ] Docker‑файлы – оба образа (основной и
mesahub) построены на Alpine, что экономит место и ускоряет старт. - [⚠ МНЕНИЕ] Shell‑скрипт
start.sh– автоматически подставляет переменные окружения в конфиг, упрощая деплой в контейнере.
Вердикт
Добротный старт, но без фиксаций зависимостей и правильного Docker‑файла проект рискует «выстрелить в ногу» уже на первом продакшн‑деплое.
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).