Lühidalt: Composer on PHP paketihaldur. See loeb failist composer.json, milliseid teeke projekt vajab, laadib need kausta vendor, hoiab täpsed versioonid failis composer.lock ja loob autoloaderi, mis klasse automaatselt leiab. Composer haldab seega teie rakenduse koodi, mitte PHP interpretaatorit ennast: Composeri uuendus ei sulge PHP-s olevat auku nagu PHP2Shell.
Mis on Composer ja milleks seda vaja on?
Vaevalt koosneb tänapäeval ükski PHP rakendus ainult omast koodist. Raamistikud, meiliteegid, PDF-i loomine või maksesidumised lisanduvad valmispakettidena. Composer, PHP paketihaldur, hoolitseb selle eest, et need paketid koonduksid sobivates versioonides ja et iga sõltuvus tooks kaasa oma sõltuvused.
Otsustajale tähendab see: suur osa koodist, mis teie serveris töötab, pärineb kolmandatelt osapooltelt. See on tõhus, kuid nõuab hooldust. Administraatoritele ja arendajatele tähendab see: kes Composerit korralikult kasutab, saab alati jälgida, milline teegi versioon tootmises töötab.
Paketi standardallikas on Composeri dokumentatsiooni järgi Packagist.org. Muid allikaid, näiteks agentuuri sisemisi hoidlaid, saab kanda faili composer.json jaotisse repositories.
composer.json, composer.lock ja vendor: kolm ehituskivi
Composer töötab kolme asjaga, mida tasub tunda enne serveri üle võtmist või agentuuri tellimist.
| Ehituskivi | Sisu | Kas kuulub hoidlasse? |
|---|---|---|
composer.json |
soovitud paketid versioonivahemikega (require, require-dev), autoload-reeglid, sätted |
jah |
composer.lock |
kõigi pakettide, ka kaudsete, täpselt lahendatud versioonid | jah, Composeri dokumentatsiooni järgi selgesõnaliselt |
vendor/ |
pakettide allalaaditud kood ja loodud autoloader | ei, luuakse paigaldamisel |
Jaotises require on paketid, mida rakendus töös vajab. Jaotises require-dev on arenduse ja testimise tööriistad, näiteks testiraamistikud või staatiline analüüs. See eraldus on oluline, sest arendustööriistadel ei ole tootmisserveris midagi teha.
{
"require": {
"php": ">=8.3",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^11.0"
},
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
Näite versiooniandmed on valitud ainult illustreerimiseks. Milliseid versioone teie projekt vajab, tuleneb selle nõuetest.
install või update: vahe käitamises
Need kaks käsku kõlavad sarnaselt, kuid neil on väga erinevad tagajärjed.
composer installloeb failicomposer.lockja paigaldab täpselt seal fikseeritud versioonid. See on korratav ja kuulub väljaveeretamisse.composer updatelahendab kõik sõltuvused uuesti, toob uusimad sobivad versioonid ja kirjutab failicomposer.lockümber. See kuulub arendusse, koos järgnevate testidega.
Composeri dokumentatsiooni järgi teeb update pärast lukufaili kirjutamist lisaks turvakontrolli (audit), kui seda ei lülitata välja valikuga --no-audit. install vaikimisi ei kontrolli; selleks on olemas valik --audit.
Autoloading: kuidas Composer klasse leiab
Composer loob faili vendor/autoload.php. Kui see üks kord kaasata, laadib PHP iga klassi alles siis, kui seda vaja on. Oma koodi jaoks määratakse jaotises autoload, milline nimeruum asub millises kaustas. Selleks soovitatakse PSR-4, PHP-FIG standardit. Kuidas see täpselt töötab, selgitab leht Nimeruumid ja autoloading; ülevaate kõigist standarditest annab leht PSR-standardid.
<?php
require __DIR__ . '/../vendor/autoload.php';
$log = new Monolog\Logger('app'); // laaditakse vajadusel automaatselt
Composer tootmises: korralik väljaveeretamine
Väljaveeretamiseks on end õigustanud kindel järjekord. Kõige parem on see käivitada build-torus, mitte käsitsi serveris.
- Lukufaili kontroll:
composer validatetagab, etcomposer.jsonon kehtiv jacomposer.lockajakohane. - Paigaldamine ilma arenduspakettideta:
composer install --no-devjätabrequire-devvälja. - Autoloaderi optimeerimine:
--optimize-autoloader(lühidalt-o) muudab reeglid klassinimekirjaks. Valikuga--classmap-authoritativelaadib PHP klasse ainult sellest nimekirjast. - Turvakontroll:
composer audit --lockedkontrollib lukufaili versioone teadaolevate turvateadete vastu ja teatab hüljatud pakettidest. - vendor väljaspool veebijuurt: URL-i kaudu peaks olema kättesaadav ainult avalik kaust sisenemisskriptiga.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
composer outdated näitab lisaks, millistel paigaldatud pakettidel on uuemad versioonid. See on alus planeeritud uuendustele kiirustavate üksiktegevuste asemel.
Composer, turvalisus ja PHP2Shell
Composer ja PHP2Shell puudutavad kahte erinevat tasandit. Augud CVE-2026-109618 ja CVE-2026-109619 asuvad PHP interpretaatoris endas. Parandatud on need versioonides PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35 ning kõik PHP protsessid tuleb pärast seda uuesti käivitada. Ükski composer update ega pakett kaustas vendor sellel midagi ei muuda.
Sellegipoolest kuulub Composer iga intsidendijärgse kontrolli juurde. Kes toob serverisse kahjuliku koodi, saab muuta ka faile kaustas vendor ja vendor/autoload.php laaditakse igal päringul. Värske composer install kontrollitud lukufailist tühja kataloogi on seetõttu hea viis paketikoosseisu taastamiseks. Kuidas sõltuvusi regulaarselt teadaolevate aukude suhtes kontrollida, kirjeldab juhend composer audit.
Roheline composer audit ei ütle PHP paikaseisu kohta midagi. Kontrollige PHP käitusaega eraldi, näiteks meie PHP paigateenusega.
Kuidas PHP SOS konkreetselt aitab?
- Kaardistame iga rakenduse PHP versiooni, Composeri paketid ja lukufaili seisu ning eristame seejuures selgelt interpretaatorit ja teeke.
- Kontrollime, kas
vendorja lukufail sobivad kokku ning kas tootmises asub arenduspakette või muudetud faile. - Seame sisse korratava väljaveeretamise käsuga
install --no-dev, optimeeritud autoloaderi ja auditiga. - Pärast intsidenti taastame paketikoosseisu kontrollitud lukufailist ja dokumenteerime tulemuse.
Korduma kippuvad küsimused
Kas composer.lock peab minema Git-hoidlasse?
Jah. Composeri dokumentatsioon soovitab selgesõnaliselt composer.lock faili commit'ida. Ainult nii paigaldavad arendus, CI ja tootmine täpselt samad paketiversioonid.
Mis vahe on composer install ja composer update vahel?
install paigaldab versioonid, mis on kirjas failis composer.lock. update lahendab sõltuvused uuesti, toob sobivad uuemad versioonid ja kirjutab composer.lock faili ümber. Tootmisserverisse kuulub ainult install.
Kas Composeri uuendus sulgeb PHP2Shelli augu?
Ei. Composer haldab teie rakenduse teeke, mitte PHP interpretaatorit. PHP2Shell suletakse ainult PHP käitusaja uuendusega parandatud versioonile ja kõigi PHP protsesside taaskäivitusega.
Kus peaks vendor kaust asuma?
Ideaalis väljaspool avalikult kättesaadavat veebikataloogi. Paljud raamistikud panevad veebijuurde ainult public kausta, samal ajal kui vendor asub ühe taseme kõrgemal.