Situația actuală: PHP2Shell. Două vulnerabilități critice PHP (CVSS 9.2) permit cod malițios fără autentificare. Patchuri din 21.10.2026.Ce este de făcut acum →

Composer: managerul de pachete pentru PHP

Composer descarcă și administrează bibliotecile pe care se sprijină proiectele PHP moderne. Cine înțelege composer.json, composer.lock și autoloaderul livrează reproductibil și mai sigur.

Stadiu 5 min de cititCunoștințe PHP

Pe scurt: Composer este managerul de pachete pentru PHP. El citește din fișierul composer.json ce biblioteci are nevoie un proiect, le descarcă în directorul vendor, consemnează versiunile exacte în composer.lock și generează un autoloader care găsește automat clasele. Composer administrează astfel codul aplicației dumneavoastră, nu interpretorul PHP însuși: o actualizare Composer nu închide o vulnerabilitate din PHP precum PHP2Shell.

Ce este Composer și la ce folosește?

Aproape nicio aplicație PHP de azi nu constă doar din cod propriu. Framework-uri, biblioteci de e-mail, generare de PDF sau conectări de plată vin ca pachete gata făcute. Composer, managerul de pachete pentru PHP, se asigură că aceste pachete ajung împreună în versiuni potrivite și că fiecare dependență își aduce propriile dependențe.

Pentru factorii de decizie asta înseamnă: o mare parte din codul care rulează pe serverul dumneavoastră provine de la terți. Este eficient, dar cere întreținere. Pentru administratori și dezvoltatori înseamnă: cine folosește Composer curat poate verifica oricând ce versiune a cărei biblioteci rulează în producție.

Sursa standard de pachete este, potrivit documentației Composer, Packagist.org. Alte surse, de exemplu repository-uri interne ale unei agenții, pot fi înscrise în composer.json la repositories.

composer.json, composer.lock și vendor: cele trei componente

Composer lucrează cu trei lucruri pe care ar trebui să le cunoașteți înainte de a prelua un server sau de a angaja o agenție.

Componentă Conținut Aparține repository-ului?
composer.json pachetele dorite, cu intervale de versiuni (require, require-dev), reguli de autoload, setări da
composer.lock versiunile rezolvate exact ale tuturor pachetelor, inclusiv cele indirecte da, explicit conform documentației Composer
vendor/ codul descărcat al pachetelor și autoloaderul generat nu, se generează la instalare

La require se află pachetele de care aplicația are nevoie în funcționare. La require-dev se află instrumente pentru dezvoltare și teste, de exemplu framework-uri de testare sau analiză statică. Această separare este importantă, deoarece instrumentele de dezvoltare nu au ce căuta pe un server de producție.

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

Indicațiile de versiune din exemplu sunt alese doar pentru ilustrare. Ce versiuni are nevoie proiectul dumneavoastră rezultă din cerințele lui.

install sau update: diferența în exploatare

Cele două comenzi sună asemănător, dar au consecințe foarte diferite.

  • composer install citește composer.lock și instalează exact versiunile consemnate acolo. Este reproductibil și aparține livrării.
  • composer update rezolvă toate dependențele din nou, aduce cele mai noi versiuni potrivite și rescrie composer.lock. Aparține dezvoltării, cu teste ulterioare.

Potrivit documentației Composer, update execută după scrierea fișierului lock suplimentar o verificare de securitate (audit), dacă nu este dezactivată cu --no-audit. install nu verifică implicit; pentru aceasta există opțiunea --audit.

Autoloading: cum găsește Composer clasele

Composer generează fișierul vendor/autoload.php. Odată inclus, PHP încarcă fiecare clasă abia atunci când este necesară. Pentru codul propriu se stabilește în secțiunea autoload ce namespace se află în ce director. Pentru aceasta este recomandat PSR-4, un standard al PHP-FIG. Cum funcționează exact explică pagina Namespaces și autoloading; o prezentare a tuturor standardelor oferă pagina Standardele PSR.

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

$log = new Monolog\Logger('app');   // se încarcă automat la nevoie

Composer în producție: livrare curată

Pentru livrare s-a dovedit utilă o ordine fixă. Ea rulează cel mai bine într-un pipeline de build și nu manual pe server.

  1. Verificarea fișierului lock: composer validate asigură că composer.json este valid și composer.lock este actual.
  2. Instalarea fără pachetele de dezvoltare: composer install --no-dev omite require-dev.
  3. Optimizarea autoloaderului: --optimize-autoloader (pe scurt -o) transformă regulile într-o listă de clase. Cu --classmap-authoritative, PHP încarcă clase exclusiv din această listă.
  4. Verificarea de securitate: composer audit --locked verifică versiunile din fișierul lock față de avizele de securitate cunoscute și raportează pachetele abandonate.
  5. vendor în afara webroot: Doar directorul public cu scriptul de intrare ar trebui să fie accesibil prin URL.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev

composer outdated arată suplimentar care pachete instalate au versiuni mai noi. Aceasta este baza pentru actualizări planificate în loc de acțiuni izolate făcute în grabă.

Composer, securitate și PHP2Shell

Composer și PHP2Shell privesc două niveluri diferite. Vulnerabilitățile CVE-2026-109618 și CVE-2026-109619 se află în interpretorul PHP însuși. Ele sunt remediate în PHP 8.5.12, 8.4.27, 8.3.36 și 8.2.35, iar după aceea toate procesele PHP trebuie repornite. Nicio comandă composer update și niciun pachet din vendor nu schimbă nimic în această privință.

Totuși, Composer aparține oricărei verificări de după un incident. Cine aduce cod malițios pe un server poate modifica și fișiere din vendor, iar vendor/autoload.php este încărcat la fiecare cerere. Un composer install proaspăt din fișierul lock verificat, într-un director gol, este de aceea o metodă bună de a reface stocul de pachete. Cum verificați regulat dependențele pentru vulnerabilități cunoscute descrie ghidul composer audit.

Important

Un composer audit verde nu spune nimic despre starea de patch a PHP. Verificați mediul de execuție PHP separat, de exemplu cu serviciul nostru de patch PHP.

Cum ajută PHP SOS concret?

  • Pentru fiecare aplicație inventariem versiunea PHP, pachetele Composer și starea fișierului lock, separând curat interpretorul de biblioteci.
  • Verificăm dacă vendor și fișierul lock se potrivesc între ele și dacă în producție se află pachete de dezvoltare sau fișiere modificate.
  • Configurăm o livrare reproductibilă cu install --no-dev, autoloader optimizat și audit.
  • După un incident refacem stocul de pachete din fișierul lock verificat și documentăm rezultatul.

Întrebări frecvente

Trebuie composer.lock să intre în repository-ul Git?

Da. Documentația Composer recomandă explicit comiterea fișierului composer.lock. Doar așa dezvoltarea, CI și producția instalează exact aceleași versiuni de pachete.

Care este diferența dintre composer install și composer update?

install instalează versiunile consemnate în composer.lock. update rezolvă dependențele din nou, aduce versiuni noi potrivite și rescrie composer.lock. Pe serverul de producție aparține doar install.

Închide o actualizare Composer vulnerabilitatea PHP2Shell?

Nu. Composer administrează bibliotecile aplicației dumneavoastră, nu interpretorul PHP. PHP2Shell se închide doar prin actualizarea mediului de execuție PHP la o versiune corectată și repornirea tuturor proceselor PHP.

Unde ar trebui să se afle directorul vendor?

Ideal în afara directorului web accesibil public. Multe framework-uri plasează în webroot doar un director public, în timp ce vendor se află cu un nivel mai sus.

Surse

Contact imediat

Fiecare oră contează. Scrieți-ne acum.

Descrieți pe scurt sistemul, versiunea PHP și ce ați observat. Ne vom face auziți, clarificăm situația și lucrăm la distanță până când incidentul este încheiat și documentat.

Ajutor imediat