Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

Composer: upravljalnik paketov za PHP

Composer nalaga in upravlja knjižnice, na katerih temeljijo sodobni projekti PHP. Kdor razume composer.json, composer.lock in samodejni nalagalnik, dostavlja ponovljivo in varneje.

Stanje 4 min branjaZnanje o PHP

Na kratko: Composer je upravljalnik paketov za PHP. Iz datoteke composer.json prebere, katere knjižnice projekt potrebuje, jih prenese v mapo vendor, natančne različice zabeleži v composer.lock in ustvari samodejni nalagalnik (autoloader), ki razrede najde sam. Composer tako upravlja kodo vaše aplikacije, ne samega interpreterja PHP: posodobitev Composerja ne zapre ranljivosti v PHP, kot je PHP2Shell.

Kaj je Composer in čemu služi?

Komaj katera aplikacija PHP danes obsega samo lastno kodo. Ogrodja, knjižnice za pošto, ustvarjanje PDF ali povezave za plačila pridejo kot končni paketi. Composer, upravljalnik paketov za PHP, poskrbi, da se ti paketi zberejo v ustreznih različicah in da vsaka odvisnost prinese svoje odvisnosti.

Za odločevalce to pomeni: velik del kode, ki teče na vašem strežniku, izvira od tretjih. To je učinkovito, a zahteva vzdrževanje. Za skrbnike in razvijalce to pomeni: kdor Composer uporablja čisto, lahko kadar koli izsledi, katera različica katere knjižnice teče v produkciji.

Standardni vir paketov je po dokumentaciji Composerja Packagist.org. Druge vire, na primer interne repozitorije agencije, je mogoče vpisati v composer.json pod repositories.

composer.json, composer.lock in vendor: trije gradniki

Composer dela s tremi stvarmi, ki jih je dobro poznati, preden prevzamete strežnik ali naročite agencijo.

Gradnik Vsebina Ali sodi v repozitorij?
composer.json želeni paketi z razponi različic (require, require-dev), pravila nalagalnika, nastavitve da
composer.lock natančno razrešene različice vseh paketov, tudi posrednih da, po dokumentaciji Composerja izrecno
vendor/ prenesena koda paketov in ustvarjeni nalagalnik ne, ustvari se ob namestitvi

Pod require stojijo paketi, ki jih aplikacija potrebuje v delovanju. Pod require-dev stojijo orodja za razvoj in teste, na primer ogrodja za testiranje ali statična analiza. Ta delitev je pomembna, ker razvojna orodja na produkcijskem strežniku nimajo kaj iskati.

{
    "require": {
        "php": ">=8.3",
        "monolog/monolog": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}

Navedbe različic v primeru so izbrane samo za ponazoritev. Katere različice vaš projekt potrebuje, izhaja iz njegovih zahtev.

install ali update: razlika v delovanju

Ukaza zvenita podobno, a imata zelo različni posledici.

  • composer install prebere composer.lock in namesti natanko tam zabeležene različice. To je ponovljivo in sodi v dostavo.
  • composer update odvisnosti razreši znova, prenese najnovejše ustrezne različice in composer.lock na novo napiše. To sodi v razvoj, z naknadnimi testi.

Po dokumentaciji Composerja update po zapisu datoteke lock dodatno izvede varnostno preverjanje (audit), če ga ne izklopite z --no-audit. install privzeto ne preverja; za to obstaja možnost --audit.

Samodejno nalaganje: kako Composer najde razrede

Composer ustvari datoteko vendor/autoload.php. Ko je enkrat vključena, PHP vsak razred naloži šele, ko je potreben. Za lastno kodo se v razdelku autoload določi, kateri imenski prostor leži v kateri mapi. Priporočen je PSR-4, standard PHP-FIG. Kako natančno to deluje, razlaga stran Imenski prostori in samodejno nalaganje; pregled vseh standardov daje stran Standardi PSR.

<?php
require __DIR__ . '/../vendor/autoload.php';

$log = new Monolog\Logger('app');   // se po potrebi samodejno naloži

Composer v produkciji: čista dostava

Za dostavo se je obnesel stalen vrstni red. Najbolje teče v cevovodu za gradnjo, ne ročno na strežniku.

  1. Preveriti datoteko lock: composer validate zagotovi, da je composer.json veljaven in composer.lock aktualen.
  2. Namestiti brez razvojnih paketov: composer install --no-dev izpusti require-dev.
  3. Optimizirati nalagalnik: --optimize-autoloader (na kratko -o) pravila pretvori v seznam razredov. Z --classmap-authoritative PHP razrede nalaga izključno s tega seznama.
  4. Varnostno preverjanje: composer audit --locked preveri različice iz datoteke lock glede na znana varnostna obvestila in javi opuščene pakete.
  5. vendor zunaj korena spleta: po URL naj bo dosegljiva samo javna mapa z vstopno skripto.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev

composer outdated dodatno pokaže, kateri nameščeni paketi imajo novejše različice. To je podlaga za načrtovane posodobitve namesto naglih posameznih akcij.

Composer, varnost in PHP2Shell

Composer in PHP2Shell zadevata dve različni ravni. Ranljivosti CVE-2026-109618 in CVE-2026-109619 ležita v samem interpreterju PHP. Odpravljeni sta v PHP 8.5.12, 8.4.27, 8.3.36 in 8.2.35, nato pa je treba znova zagnati vse procese PHP. Noben composer update in noben paket v vendor pri tem ne spremeni ničesar.

Kljub temu sodi Composer v vsak pregled po incidentu. Kdor na strežnik prinese škodljivo kodo, lahko spremeni tudi datoteke v vendor, vendor/autoload.php pa se naloži ob vsaki zahtevi. Svež composer install iz preverjene datoteke lock v prazen imenik je zato dobra metoda za obnovitev stanja paketov. Kako odvisnosti redno preverjate glede znanih ranljivosti, opisuje vodnik composer audit.

Pomembno

Zelen composer audit ne pove ničesar o stanju popravkov PHP. Izvajalno okolje PHP preverite ločeno, na primer z našo storitvijo popravljanja PHP.

Kako PHP SOS pomaga konkretno?

  • Za vsako aplikacijo zajamemo različico PHP, pakete Composer in stanje datoteke lock ter pri tem čisto ločimo med interpreterjem in knjižnicami.
  • Preverimo, ali vendor in datoteka lock drug drugemu ustrezata ter ali v produkciji ležijo razvojni paketi ali spremenjene datoteke.
  • Vzpostavimo ponovljivo dostavo z install --no-dev, optimiranim nalagalnikom in auditom.
  • Po incidentu stanje paketov znova vzpostavimo iz preverjene datoteke lock in dokumentiramo rezultat.

Pogosta vprašanja

Ali mora biti composer.lock v repozitoriju Git?

Da. Dokumentacija Composerja izrecno priporoča, da composer.lock potrdite (commit). Samo tako razvoj, CI in produkcija namestijo popolnoma enake različice paketov.

Kakšna je razlika med composer install in composer update?

install namesti različice, zabeležene v composer.lock. update odvisnosti razreši znova, prenese ustrezne novejše različice in composer.lock na novo napiše. Na produkcijskem strežniku sodi samo install.

Ali posodobitev Composerja zapre ranljivost PHP2Shell?

Ne. Composer upravlja knjižnice vaše aplikacije, ne interpreterja PHP. PHP2Shell zapre samo posodobitev izvajalnega okolja PHP na odpravljeno različico in ponovni zagon vseh procesov PHP.

Kje naj leži mapa vendor?

Idealno zunaj javno dosegljivega spletnega imenika. Številna ogrodja v koren spleta postavijo samo mapo public, vendor pa leži eno raven više.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč