Релиз Composer 2.10 с упором на безопасность цепочек поставок и защиту от вредоносных пакетов. В релиз добавили встроенную фильтрацию malware, новую систему dependency policy, изменения в механизме source fallback и несколько улучшений для работы с зависимостями.
Защита от вредоносных пакетов
В Composer 2.10 появился механизм malware policy. Он позволяет автоматически блокировать версии пакетов, помеченные как вредоносные.
Если пакет признан malware:
его версия исключается из dependency resolution pool;
composer update,composer requireиcomposer create-projectне смогут установить такой пакет;composer installтакже заблокирует установку, даже если вредоносная версия уже попала вcomposer.lock;composer auditзавершится ошибкой при обнаружении malware.
Для определения вредоносных пакетов используется feed от Aikido. Функция включена по умолчанию для всех пользователей Packagist и не требует дополнительной настройки.
Поводом для изменений стали недавние supply chain-атаки в PHP-экосистеме, включая компрометацию пакетов laravel-lang и intercom/intercom-php.
Новая система dependency policy
Composer 2.10 объединяет настройки безопасности в единый объект config.policy.
Теперь политики для security advisories, abandoned packages и malware настраиваются одинаковым способом.
Пример отключения проверки abandoned-пакетов:
{
"config": {
"policy": {
"abandoned": false
}
}
}Полное отключение всех политик:
{
"config": {
"policy": false
}
}Основные параметры policy:
block— блокировка пакетов во время install/update;audit— поведениеcomposer audit;ignore— исключения для отдельных пакетов.
Для malware появился параметр block-scope, определяющий, нужно ли блокировать пакет только во время update или также при install. По умолчанию используется режим all.
Поддержка собственных политик
Организации могут подключать собственные dependency policies через внешние источники.
Пример кастомной политики:
{
"config": {
"policy": {
"company-policy": {
"sources": [
{
"type": "url",
"url": "https://acme.example.com/bad-pkgs.json"
}
],
"audit": "fail"
}
}
}
}Это позволяет централизованно запрещать определённые версии пакетов внутри компании.
Deprecation source fallback
Composer 2.10 начинает отключение механизма source fallback.Ранее Composer автоматически переключался на установку из Git-репозитория, если загрузка dist-архива завершалась ошибкой. Это могло приводить к установке вредоносного кода даже при наличии безопасной mirrored-версии пакета.
Для совместимости добавлен параметр source-fallback, позволяющий временно вернуть старое поведение.
Полное удаление source fallback запланировано в Composer 2.11.
Wildcard-поддержка для --with
Флаг --with в composer update теперь поддерживает wildcard-выражения.
Пример:
composer update --with "acme/*:^2.0"Теперь можно временно ограничивать версии сразу для группы пакетов одного vendor без перечисления каждого пакета отдельно.
--require для create-project
Команда create-project получила параметр --require.
Пример:
composer create-project acme/skeleton my-project \
--require="acme/extra-bundle:^1.0"Это позволяет устанавливать дополнительные зависимости сразу при создании проекта.
Другие изменения
В Composer 2.10 также вошли:
оптимизация autoloading для плагинов;
снижение потребления памяти PoolOptimizer;
исправление
--bump-after-update;дополнительные security hardening-изменения для Git credentials и TLS.
В сообществе PHP релиз уже называют одним из самых важных обновлений Composer за последнее время из-за усиления защиты от supply chain-атак.
Источник: Package List