
Защищает от атак на цепочку поставок, слопсквоттинга и тайпсквоттинга со стороны зависимостей и кода.
cargo install sloppy-joe
Атака на цепочку поставок LiteLLM (март 2026) скомпрометировала пакет с 97 млн загрузок в месяц. Злоумышленники украли учетные данные для публикации, выложили вредоносные версии, которые собирали SSH-ключи, облачные учетные данные и секреты Kubernetes. Встроенная 72-часовая задержка по возрасту версий в sloppy-joe заблокировала бы обе отравленные версии — они были обнаружены в течение нескольких часов, задолго до того, как заслонка открылась бы. Если вы запускаете
sloppy-joe checkв CI, эта атака проваливается. Полный анализ
Генераторы ИИ-кода галлюцинируют имена пакетов примерно в 20% случаев. Злоумышленники регистрируют эти имена и ждут. sloppy-joe ловит их в CI до того, как будет выполнено npm install или pip install.
cargo install sloppy-joe
sloppy-joe check
sloppy-joe check --full
sloppy-joe check --ci
sloppy-joe check --dir ./my-project
sloppy-joe check --type npm
sloppy-joe check --python-groups dev,test --python-version 3.12 sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
sloppy-joe check --config /etc/sloppy-joe/config.json
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
sloppy-joe check --json
sloppy-joe check --review-exceptions
sloppy-joe init --register
sloppy-joe init --greenfield --ecosystem npm
sloppy-joe init --from-current
sloppy-joe init --from-current --register
sloppy-joe init > /secure/location/sloppy-joe.json
### Nix```bash
nix profile install github:brennhill/sloppy-joe
Режимы сканирования:
sloppy-joe check запускает быстрый локальный барьер (guardrail). Он всегда применяет политики разбора манифеста, блокировки/синхронизации, подтверждения происхождения (provenance) и неподдерживаемых источников. Если изменилось состояние зависимостей или политики, или последняя успешная полная проверка была больше 24 часов назад, выводится рекомендация sloppy-joe check --full.sloppy-joe check --full запускает строгую онлайн-проверку и обновляет запись состояния успешной полной проверки.sloppy-joe check --ci выполняет то же строгое покрытие, что и --full, но с ориентацией на CI.sloppy-joe check по умолчанию оценивает профиль runtime. Если существуют уточнённые зависимости, выводится предупреждение с указанием передать явные флаги --python-groups, --python-extras, --python-platform и/или --python-version для паритета с CI/сборкой.sloppy-joe check всегда напоминает использовать --ci или --full для CI и продуктового шлюза (production gating).Коды выхода: 0 = в выбранном режиме проблем, блокирующих выполнение, не найдено, 1 = найдены блокирующие проблемы, 2 = ошибка выполнения.
Поддержка: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven) и .NET — автоматическое определение по файлам манифеста.
Путеводители по экосистемам: см. docs/ecosystems/README.md для текущей модели доверия, поддерживаемых функций и ограничений режима «fail-closed» для каждой экосистемы.
| Экосистема | Обязательный манифест | Доверенный lockfile / состояние проекта |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json или npm-shrinkwrap.json; устаревший npm v1 блокируется по умолчанию |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml, requirements*.txt, Pipfile, setup.cfg или setup.py | доверенный путь Poetry использует poetry.lock, доверенный путь uv использует uv.lock, а полностью хеш-блокированный pip-tools доверяется только тогда, когда зафиксированный граф требований (requirements graph) точно привязывает значения --index-url и любые --extra-index-url; видимые в репозитории индексы Python могут быть добавлены в белый список через trusted_indexes.pypi; доверенные режимы Python оценивают один выбранный профиль установки за раз (runtime по умолчанию, явные группы/extras/платформа/архитектура/версия через CLI); устаревшие манифесты допускаются с предупреждениями по умолчанию |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum требуется для внешних зависимостей |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle или build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | только предупреждение: доверенного локального lockfile проекта пока нет |
| .NET / NuGet | .csproj | packages.lock.json |
Источники конфигурации: локальный путь к файлу, URL по HTTPS или переменная окружения SLOPPY_JOE_CONFIG. Конфигурация никогда не считывается из каталога проекта (см. CONFIG.md почему).