Текуща ситуация: PHP2Shell. Две критични уязвимости в PHP (CVSS 9,2) позволяват злонамерен код без вход. Корекции от 21.10.2026 г.Какво да направите сега →

composer audit: проверка на зависимостите за уязвимости

Как разработчиците с composer audit откриват известни уязвимости в библиотеките, автоматизират проверката и избягват типични грешки при deployment.

Актуалност 5 мин. четенеНаръчници

Накратко: composer audit сверява пакетите на Вашия PHP проект с известни съобщения за сигурност и показва засегнатите версии. Изпълнявайте командата при всеки build и редовно върху продуктивното състояние. Важно след PHP2Shell: проверката обхваща библиотеките, а не самия интерпретатор на PHP.

Защо зависимостите се нуждаят от внимание именно сега

Съвременните PHP приложения се състоят най-вече от чужд код. Магазин на база Symfony или портал с Laravel бързо носи няколко десетки до стотици пакета, много от тях косвено през други пакети. Всяка от тези библиотеки може да съдържа уязвимост. Затова OWASP Top 10 отделя остарелите и уязвими компоненти в собствена категория риск.

През октомври 2026 г. PHP2Shell показа колко бързо една критична уязвимост се разпространява. Двете уязвимости CVE-2026-109618 и CVE-2026-109619 засягат самия PHP, а не пакетите на Composer. Много екипи обаче през тези дни проверяваха цялата си верига и установиха, че изобщо не познават точно състоянието на зависимостите си.

Тази празнина в прегледа може да се затвори с малко усилия. Composer носи подходящия инструмент вече в актуалните си версии.

Какво проверява composer audit и какво не

Командата чете инсталираните пакети или lock файла и пита за известни съобщения за сигурност за тези пакети. За всяко съвпадение показва пакета, засегнатия диапазон на версиите, степента на тежест, идентификатора на съобщението и връзка към описанието.

Ниво Проверява ли се от composer audit? Как да се провери иначе
Composer пакети в проекта да composer audit
Интерпретатор на PHP (напр. PHP2Shell) не Състояние на пакета, потвърждение от хостинг доставчика
PHP разширения от системата не Пакетният мениджър на дистрибуцията
JavaScript пакети във frontend не Инструмент на съответния пакетен мениджър
Собствен код на приложението не Преглед на кода, одит на сигурността

Командата отчита и косвените зависимости, т.е. пакети, които никога не сте заявявали сами, но които идват през други пакети. Именно там често незабелязано се крият уязвимости, защото никой в екипа не познава тези пакети. По-новите версии на Composer освен това сочат пакети, обявени от авторите си за изоставени. Такива пакети по правило вече не получават корекции и трябва да се заменят.

Чистият резултат значи само, че за инсталираните версии на пакетите няма известно съобщение. Неизвестни уязвимости и грешки в собствения код инструментът не открива. Как сами да проверите състоянието на PHP, описва статията Как да проверите правилно версията на PHP и състоянието на пача.

Изпълнение на composer audit и четене на резултатите

В директорията на проекта е достатъчна една команда. Вариантите се различават по това какво се проверява и как се извежда резултатът.

# Проверка на инсталираните пакети
composer audit

# Проверка само на lock файла, напр. в build без инсталирани пакети
composer audit --locked

# Без зависимостите за разработка (състояние като на сървъра)
composer audit --no-dev

# Машинночетим изход за оценка или система за тикети
composer audit --format=json > audit-$(date +%F).json

Ако командата намери уязвимости, завършва с код за грешка. Това е нарочно, защото така автоматизираният build се прекъсва. Оценете всяко съвпадение: пакетът използва ли се на сървъра, използва ли се засегнатата функция, има ли поправена версия?

# Кои директни зависимости са остарели?
composer outdated --direct
# Защо е инсталиран определен пакет?
composer why vendor/paket
# Целево актуализиране със зависимостите
composer update vendor/paket --with-dependencies

Тествайте всяка актуализация в staging среда. Актуализациите за сигурност в рамките на същата основна версия обикновено са безпроблемни, докато нова основна версия може да изисква корекции в кода.

Автоматизиране на проверката

Еднократното изпълнение помага малко, защото нови уязвимости стават известни непрекъснато. Затова включете composer audit на две места: в build pipeline при всяка промяна и в редовна проверка на продуктивното състояние, дори когато в кода нищо не се променя.

Прост скрипт за ежедневно изпълнение на build или проверяващия сървър може да изглежда така:

#!/bin/sh
# Ежедневен одит на доставеното състояние (адаптирайте пътя)
cd /srv/build/meine-anwendung || exit 1
if ! composer audit --locked --no-dev --format=plain > /var/log/composer-audit.log 2>&1; then
  logger -t composer-audit "Lücken in meine-anwendung gefunden, siehe /var/log/composer-audit.log"
fi

Препращайте съобщението от системния протокол към Вашето наблюдение, вътрешната поща или системата за тикети. Важно е някой да отговаря за оценката на съобщенията. Одит, чиито предупреждения никой не чете, не защитава.

Съвет

Задайте в composer.json под config.platform.php версията на PHP, която работи на сървъра. Тогава Composer разрешава само пакети, които пасват на това състояние, а composer check-platform-reqs показва отклоненията.

Чисто доставяне: deployment без странични ефекти

И пътят към сървъра влияе на сигурността. Доказаха се няколко основни правила:

  • Включете composer.lock в хранилището и на сървъра изпълнявайте само composer install, никога composer update.
  • Инсталирайте с --no-dev, за да не попадат инструменти за тестване и дебъгване на продуктивния сървър.
  • Дръжте папката vendor/ извън кореновата директория на уеб сървъра, така че да не е достъпна директно през URL.
  • Изпълнявайте composer validate в build, за да откривате рано грешни или противоречиви данни.
composer validate --strict
composer install --no-dev --prefer-dist --classmap-authoritative --no-interaction

Обърнете внимание и на поддръжката на самата версия на PHP. Библиотеките все по-често изискват актуални клонове на PHP. Който все още е на PHP 8.1 или по-стар, за самия PHP вече не получава официални актуализации и често не може да инсталира по-нови версии на пакети с корекции за сигурност. Планирането за това описва наръчникът PHP End of Life: рискове от остарели версии. Указания, специфични за фреймуърка, ще намерите на страницата Защита на приложения с Laravel.

Как конкретно помага PHP SOS?

  • Установяваме състоянието на всички зависимости и оценяваме съвпаденията според действителната употреба.
  • Въвеждаме автоматизирани проверки в build и експлоатацията, с ясна отговорност за констатациите.
  • Планираме и тестваме актуализациите, дори когато нови основни версии изискват корекции.
  • При желание проверяваме и собствения код и конфигурацията, където никой автоматичен инструмент не поглежда.

Проверка от трети страни описва услугата Одит на сигурността и тест за проникване.

Често задавани въпроси

Открива ли composer audit и PHP2Shell?

Не. composer audit проверява пакетите във Вашия проект, а не интерпретатора на PHP на сървъра. PHP2Shell е в самия PHP и се отстранява само чрез актуализация на PHP и рестарт на всички PHP процеси.

Трябва ли composer.lock да е в хранилището?

При приложенията да. Lock файлът фиксира кои точно версии са инсталирани. Само така composer audit проверява състоянието, което действително работи на сървъра, а всеки deployment инсталира едни и същи версии.

Какво да направя, ако за засегнат пакет няма актуализация?

Проверете дали Вашият проект изобщо използва засегнатата функция и документирайте оценката. Ако няма поправка, идват предвид заместващ пакет, собствен пач или временна защита на ниво сървър.

Колко често да изпълнявам composer audit?

При всеки build и допълнително редовно, например ежедневно, дори без промени в кода. Нови уязвимости се съобщават непрекъснато и състояние, което вчера е било чисто, днес може да е засегнато.

Източници

Незабавен контакт

Всеки час има значение. Пишете ни сега.

Опишете накратко системата, версията на PHP и какво сте забелязали. Ние се свързваме с Вас, уточняваме ситуацията и работим отдалечено, докато инцидентът бъде приключен и документиран.

Незабавна помощ