Stručne: Composer je správca balíkov pre PHP. Zo súboru composer.json číta, ktoré knižnice projekt potrebuje, sťahuje ich do priečinka vendor, presné verzie zaznamenáva v composer.lock a vytvára autoloader, ktorý automaticky nachádza triedy. Composer teda spravuje kód vašej aplikácie, nie samotný interpreter PHP: aktualizácia Composeru nezatvorí zraniteľnosť v PHP ako PHP2Shell.
Čo je Composer a načo ho potrebujete?
Len máloktorá aplikácia PHP dnes pozostáva iba z vlastného kódu. Frameworky, knižnice pre e-maily, tvorba PDF alebo napojenia platieb pribúdajú ako hotové balíky. Composer, správca balíkov pre PHP, zabezpečuje, aby sa tieto balíky zišli v vhodných verziách a aby každá závislosť priniesla svoje vlastné závislosti.
Pre rozhodovateľov to znamená: veľká časť kódu, ktorý beží na vašom serveri, pochádza od tretích strán. To je efektívne, ale vyžaduje údržbu. Pre správcov a vývojárov to znamená: kto Composer používa čisto, vie kedykoľvek dohľadať, ktorá verzia ktorej knižnice beží v produkcii.
Štandardným zdrojom balíkov je podľa dokumentácie Composeru Packagist.org. Ďalšie zdroje, napríklad interné repozitáre agentúry, sa dajú zapísať v composer.json pod repositories.
composer.json, composer.lock a vendor: tri stavebné prvky
Composer pracuje s tromi vecami, ktoré by ste mali poznať skôr, než prevezmete server alebo poveríte agentúru.
| Stavebný prvok | Obsah | Patrí do repozitára? |
|---|---|---|
composer.json |
požadované balíky s rozsahmi verzií (require, require-dev), pravidlá autoload, nastavenia |
áno |
composer.lock |
presne vyriešené verzie všetkých balíkov, aj nepriamych | áno, podľa dokumentácie Composeru výslovne |
vendor/ |
stiahnutý kód balíkov a vytvorený autoloader | nie, vzniká pri inštalácii |
Pod require stoja balíky, ktoré aplikácia potrebuje v prevádzke. Pod require-dev stoja nástroje pre vývoj a testy, napríklad testovacie frameworky alebo statická analýza. Toto oddelenie je dôležité, pretože vývojárske nástroje nemajú na produkčnom serveri čo robiť.
{
"require": {
"php": ">=8.3",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^11.0"
},
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
Údaje o verziách v príklade sú zvolené len na ilustráciu. Ktoré verzie váš projekt potrebuje, vyplýva z jeho požiadaviek.
install alebo update: rozdiel v prevádzke
Oba príkazy znejú podobne, ale majú veľmi rozdielne dôsledky.
composer installčítacomposer.locka nainštaluje presne tam zaznamenané verzie. To je reprodukovateľné a patrí to do nasadenia.composer updateznova vyrieši všetky závislosti, stiahne najnovšie vhodné verzie a prepíšecomposer.lock. To patrí do vývoja, s následnými testami.
Podľa dokumentácie Composeru vykoná update po zápise súboru lock navyše bezpečnostnú kontrolu (audit), pokiaľ sa nevypne cez --no-audit. install štandardne nekontroluje; na to slúži voľba --audit.
Autoloading: ako Composer nachádza triedy
Composer vytvára súbor vendor/autoload.php. Keď sa raz zahrnie, PHP načíta každú triedu až vtedy, keď je potrebná. Pre vlastný kód sa v sekcii autoload určuje, ktorý namespace leží v ktorom priečinku. Odporúča sa na to PSR-4, štandard PHP-FIG. Ako presne to funguje, vysvetľuje stránka Namespaces a autoloading; prehľad všetkých štandardov dáva stránka Štandardy PSR.
<?php
require __DIR__ . '/../vendor/autoload.php';
$log = new Monolog\Logger('app'); // automaticky sa načíta pri potrebe
Composer v produkcii: čisté nasadenie
Pre nasadenie sa osvedčilo pevné poradie. Najlepšie beží v build pipeline, nie ručne na serveri.
- Skontrolovať súbor lock:
composer validatezabezpečí, žecomposer.jsonje platný acomposer.lockaktuálny. - Inštalovať bez vývojárskych balíkov:
composer install --no-devvynechárequire-dev. - Optimalizovať autoloader:
--optimize-autoloader(skrátene-o) premení pravidlá na zoznam tried. S--classmap-authoritativenačítava PHP triedy výlučne z tohto zoznamu. - Bezpečnostná kontrola:
composer audit --lockedkontroluje verzie zo súboru lock voči známym bezpečnostným hláseniam a hlási opustené balíky. - vendor mimo webrootu: Cez URL by mal byť dostupný len verejný priečinok so vstupným skriptom.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
composer outdated navyše ukazuje, ktoré nainštalované balíky majú novšie verzie. To je základ pre plánované aktualizácie namiesto zbrklých jednotlivých akcií.
Composer, bezpečnosť a PHP2Shell
Composer a PHP2Shell sa týkajú dvoch rôznych úrovní. Zraniteľnosti CVE-2026-109618 a CVE-2026-109619 ležia v samotnom interpreteri PHP. Opravené sú v PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35 a potom sa musia reštartovať všetky procesy PHP. Žiadny composer update a žiadny balík vo vendor na tom nič nemení.
Napriek tomu patrí Composer do každej kontroly po incidente. Kto dostane na server škodlivý kód, môže zmeniť aj súbory vo vendor a vendor/autoload.php sa načítava pri každej požiadavke. Čerstvý composer install z overeného súboru lock do prázdneho adresára je preto dobrá metóda, ako obnoviť stav balíkov. Ako pravidelne kontrolovať závislosti na známe zraniteľnosti, opisuje príručka composer audit.
Zelený composer audit nehovorí nič o stave záplat PHP. Prostredie PHP kontrolujte osobitne, napríklad našou službou záplatovania PHP.
Ako konkrétne pomáha PHP SOS?
- Pre každú aplikáciu zisťujeme verziu PHP, balíky Composer a stav súboru lock a pritom čisto oddeľujeme interpreter od knižníc.
- Kontrolujeme, či
vendora súbor lock navzájom zodpovedajú a či v produkcii neležia vývojárske balíky alebo zmenené súbory. - Zavádzame reprodukovateľné nasadenie s
install --no-dev, optimalizovaným autoloaderom a auditom. - Po incidente obnovíme stav balíkov z overeného súboru lock a výsledok zdokumentujeme.
Časté otázky
Musí byť composer.lock v repozitári Git?
Áno. Dokumentácia Composeru výslovne odporúča commitovať composer.lock. Len tak nainštalujú vývoj, CI a produkcia presne tie isté verzie balíkov.
Aký je rozdiel medzi composer install a composer update?
install nainštaluje verzie zaznamenané v composer.lock. update znova vyrieši závislosti, stiahne vhodné novšie verzie a prepíše composer.lock. Na produkčný server patrí iba install.
Zatvorí aktualizácia Composeru zraniteľnosť PHP2Shell?
Nie. Composer spravuje knižnice vašej aplikácie, nie interpreter PHP. PHP2Shell sa zatvára iba aktualizáciou prostredia PHP na opravenú verziu a reštartom všetkých procesov PHP.
Kde má ležať priečinok vendor?
Ideálne mimo verejne dostupného webového adresára. Mnohé frameworky preto vkladajú do webrootu iba priečinok public, kým vendor leží o úroveň vyššie.