composer audit сравнивает установленные пакеты с базами известных уязвимостей. Его стоит запускать после установки зависимостей и в CI, но результат требует разбора: уязвимый пакет может быть транзитивным, а обновление major-версии — сломать контракт.
Локальная проверка
composer validate --strict
composer install --no-interaction --prefer-dist
composer audit --locked
composer outdated --direct
--locked проверяет версии из composer.lock, то есть именно воспроизводимый набор для деплоя. В CI используйте ненулевой exit code как сигнал остановки публикации, но заведите документированное временное исключение, если исправленной версии ещё нет и уязвимый код недостижим.
Исправление
Определите, кто требует пакет:
composer why vendor/package
composer why-not vendor/package 2.4.1
Обновляйте минимальный набор: composer update vendor/package --with-all-dependencies. Просмотрите diff lock-файла, запустите тесты и smoke-тест. Не удаляйте composer.lock: это превращает точечное исправление в непредсказуемое обновление всей системы.
Проверяйте также PHP-расширения, контейнер и JavaScript-зависимости: Composer видит только свою экосистему.
Официальные источники