Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

Composer: PHP paketihaldur

Composer laadib ja haldab teeke, millele kaasaegsed PHP projektid ehitavad. Kes mõistab composer.json, composer.lock ja autoloaderit, veeretab välja korratavalt ja turvalisemalt.

Seis Lugemisaeg 4 minPHP teadmised

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 install loeb faili composer.lock ja paigaldab täpselt seal fikseeritud versioonid. See on korratav ja kuulub väljaveeretamisse.
  • composer update lahendab kõik sõltuvused uuesti, toob uusimad sobivad versioonid ja kirjutab faili composer.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.

  1. Lukufaili kontroll: composer validate tagab, et composer.json on kehtiv ja composer.lock ajakohane.
  2. Paigaldamine ilma arenduspakettideta: composer install --no-dev jätab require-dev välja.
  3. Autoloaderi optimeerimine: --optimize-autoloader (lühidalt -o) muudab reeglid klassinimekirjaks. Valikuga --classmap-authoritative laadib PHP klasse ainult sellest nimekirjast.
  4. Turvakontroll: composer audit --locked kontrollib lukufaili versioone teadaolevate turvateadete vastu ja teatab hüljatud pakettidest.
  5. 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.

Oluline

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 vendor ja 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.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi