## Прожарка: **hass‑addon‑frp‑client**  
**Оценка: 5/10**

### Критично
- [⚠ МНЕНИЕ] **Dockerfile:2** – образ берётся без указания тега (`FROM alpine`). При каждом билде будет скачиваться «latest», что ломает воспроизводимость и открывает путь к неожиданным уязвимостям.  
- [✓ ФАКТ: CVE-Ищейка] **Dockerfile:16** – отсутствие директивы `USER`. Контейнер работает под `root`, что отмечено Trivy (HIGH) и Checkov (CKV_DOCKER_7). Это прямой риск привилегированного выполнения.  
- [⚠ МНЕНИЕ] **run.sh:27** – `cd` без проверки статуса. Если каталог недоступен, скрипт продолжит работу в неправильном каталоге, что может привести к ошибкам при запуске FRP‑клиента.  

### Надо переделать
- [⚠ МНЕНИЕ] **Dockerfile:12‑14** – три подряд `RUN`‑команды. Их следует объединить в один слой, чтобы уменьшить размер образа и ускорить кеширование.  
- [⚠ МНЕНИЕ] **bootstrap.sh:33, 37** – объявление и присваивание переменных в одной строке маскирует код возврата. Разделите `declare var` и `var=...`.  
- [⚠ МНЕНИЕ] **bootstrap.sh:37** – используется устаревший способ замены (`${var//search/replace}` предпочтительнее).  
- [⚠ МНЕНИЕ] **bootstrap.sh:37‑47** – почти все строки без кавычек. Это открывает возможность непреднамеренного разбора слов и подстановки глобов. Обрамляйте переменные двойными кавычками.  

### Мелочи
- [✓ ФАКТ: YAML-Граммарнаци] **yamllint** – в `repository.yaml` и `frp-client/config.yaml` отсутствует `---`. Не критично, но портит читаемость.  
- [✓ ФАКТ: YAML-Граммарнаци] **config.yaml** – одна строка превышает 80 символов (107). Обрежьте или перенесите параметры.  
- [⚠ МНЕНИЕ] **README** – нет раздела «Installation», только ссылка на репозиторий. Пользователю придётся гадать, какие переменные нужны.  

### Что хорошо
- [⚠ МНЕНИЕ] **Лицензия** присутствует, что упрощает юридический аудит.  
- [⚠ МНЕНИЕ] **Dockerfile** использует небольшую базу (Alpine), что экономит место и ускоряет старт.  
- [⚠ МНЕНИЕ] **bootstrap.sh** и **run.sh** разбиты на отдельные скрипты, что облегчает локальное тестирование.  
- [⚠ МНЕНИЕ] **Отсутствие gitleaks‑индикаторов** – в репозитории нет случайно закоммиченных токенов или паролей.  
- [✓ ФАКТ: Код-Рентген] **Semgrep** нашёл только одну проблему (отсутствие USER), значит остальные части кода не содержат очевидных уязвимостей.  
- [✓ ФАКТ: Код-Рентген] **Отсутствие innerHTML, eval и редиректов** – в проекте нет веб‑компонентов, поэтому XSS‑рисков нет.  

### Вердикт
Проект выглядит как быстрый набор скриптов‑обёрток над FRP‑клиентом: идея полезна, но реализация оставляет желать лучшего – в Dockerfile и оболочечных скриптах слишком много базовых ошибок, а архитектура почти не имеет слоёв абстракции. Требуется доработать безопасность и стилистические детали, иначе образ будет «хрупким» в продакшене.

---

*Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).*
