6
/10
Прожарка: wacli
Оценка: 6/10
Критично
- [⚠ МНЕНИЕ] Dockerfile — строки 4, 13 –
apk addбез указания версии. При обновлении базового образа контейнер может «разорваться» из‑за несовместимых пакетов. - [✓ ФАКТ: CVE-Ищейка] Dockerfile — отсутствие
HEALTHCHECK(Trivy DS‑0026). Оркестратор не будет знать, когда контейнер перестал отвечать, и может бесконечно рестартовать его. - [✓ ФАКТ: Инфра-Ревизор] Checkov — CKV_DOCKER_2 (файл
Dockerfile). Образ собирается от имениroot, что открывает путь к привилегированному выполнению внутри контейнера. - [✓ ФАКТ: Код-Рентген] Semgrep — run‑shell‑injection (файл
.github/actions/setup-ci-env/action.yml, строка 52). Переменная${{ github.* }}подставляется вrun:без экранирования – потенциальный шанс выполнить произвольный шелл в CI. - [✓ ФАКТ: YAML-Граммарнаци] Yamllint — длинные строки (например,
ci.ymlстроки 57, 67, 78 > 80 симв.). Такие строки ухудшают читаемость и могут привести к ошибкам при копировании‑вставке.
Надо переделать
- [⚠ МНЕНИЕ] Версионирование пакетов – укажите точные версии в
apk add(например,apk add git=2.42.0-r0). - [⚠ МНЕНИЕ] Добавьте
HEALTHCHECK– проверкаcurl -f http://localhost:8080/health || exit 1спасёт от «зависших» подов. - [⚠ МНЕНИЕ] Перейдите на непривилегированного пользователя – создайте
USER appuserи задайте нужные права в контейнере. - [⚠ МНЕНИЕ] Экранируйте переменные в GitHub Actions – используйте
${{ toJSON(github) }}или явно задавайте безопасные значения. - [✓ ФАКТ: YAML-Граммарнаци] Приведите YAML‑файлы к единому стилю – добавьте
---в начало, поправьте отступы перед комментариями, сократите строки до 80 символов.
Мелочи
- [⚠ МНЕНИЕ] В
DockerfileиспользуетсяCGO_ENABLED=1, но в большинстве файлов CGO не нужен – можно собрать без него, уменьшив размер образа. - [⚠ МНЕНИЕ] Файлы
*_test.goразбросаны по всему дереву; их можно собрать в отдельный каталогtests/для чистоты. - [⚠ МНЕНИЕ] Некоторые файлы (
cgo_required.go,store_cleanup.go) содержат только заглушки, их стоит удалить или добавить реальную реализацию. - [⚠ МНЕНИЕ] В
go.modуказана версия Go 1.25, но CI используетgolang:1.25-alpine; стоит зафиксировать образ в CI, иначе при смене тега образ может «сломаться».
Что хорошо
- [⚠ МНЕНИЕ] Полный набор CLI‑команд – от отправки сообщений до управления группами, покрытый тестами (≈ 150 юнит‑тестов).
- [⚠ МНЕНИЕ] Тестовое покрытие – почти каждый публичный метод имеет соответствующий
*_test.go. - [⚠ МНЕНИЕ] Структурированность кода – отдельные пакеты
cmd/wacliиinternal/waчётко разделяют уровень интерфейса и бизнес‑логику. - [⚠ МНЕНИЕ] Использование
go:embed(вdocs.go) для включения справки без внешних файлов. - [✓ ФАКТ: Докер-Дед] Линтеры уже настроены:
hadolint,yamllint,semgrep– их вывод виден в CI, что упрощает поддержание качества.
Вердикт
Добротный проект, но «скрепки» от оригинальности и несколько грубых уязвимостей в Docker‑образе держат его на уровне «можно, но требует доработки».
Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).