Vai al contenuto
PHP supply chain

Composer audit per progetti PHP

Parser di composer.json o composer.lock con statistiche del progetto (numero pacchetti, vincoli PHP, estensioni richieste, breakdown require vs require-dev), EOL detection per i pacchetti PHP più diffusi (Laravel, Symfony, PHPUnit, Guzzle, Monolog, Flysystem, Doctrine), raccomandazioni di security advisories e di best practice (composer audit, roave/security-advisories). Strumento di triage: NON è un vuln scanner real-time.

Come usare l'audit

  1. 1

    Recupera il file

    composer.json: file che committi in git, contiene i constraint dichiarati (es. "laravel/framework": "^11.0"). composer.lock: file generato da composer install/update, contiene le versioni esatte risolte (es. 11.5.0). Per audit vero serve il lock perché contiene le versioni effettive.

  2. 2

    Incolla nel tool

    Il tool auto-detect il tipo: presenza di top-level packages array -> lock; presenza di require object con vincoli stringa -> json. JSON parsing strict: errori di sintassi falliscono con messaggio chiaro.

  3. 3

    Leggi il report

    Output: statistiche progetto (pacchetti totali, breakdown require/dev, PHP constraint, estensioni) + findings ordinati per severita\' (pacchetti EOL critici, EOL noti, deprecazioni, raccomandazioni). Ogni finding ha riferimento al pacchetto, motivazione, remediation suggerita.

  4. 4

    Esegui l'audit reale

    Per CVE check effettivo: dal terminale composer audit (comando ufficiale, dal 2.4, 2022). In aggiunta composer require --dev roave/security-advisories:dev-latest: blocca l'install di pacchetti con CVE noti via meta-pacchetto FriendsOfPHP. Best practice: integrare composer audit in CI/CD.

Cos'è un audit di triage e quando serve

Triage statico, non vuln scan. Il tool conosce un set curato di pacchetti PHP popolari con le rispettive date di end-of-life (security support) e flag di deprecation pubblici, e segnala major version troppo arretrate o pacchetti già fuori supporto. Non interroga database CVE remoti (FriendsOfPHP/security-advisories, Snyk DB, NVD): non sostituisce composer audit CLI o GitHub Dependabot, lo precede.

Quando il triage statico è esattamente quello che serve. Casi tipici: review di un progetto legacy senza accesso al filesystem, in cui il cliente ti incolla un composer.json in mail e vuole una valutazione in trenta secondi; audit pre-incarico per stimare lo sforzo di adeguamento prima di firmare un preventivo; screen iniziale prima di un assessment di sicurezza vero e proprio. Output: lista di rischi noti (Laravel 8 EOL, PHPUnit 9 EOL su PHP 8.4, Monolog 2 EOL) che meritano follow-up con un check CVE rigoroso.

Privacy operativa. Il file composer.lock contiene la struttura completa del progetto, le sue dipendenze transitive e gli eventuali pacchetti privati con riferimenti a repository VCS interni. Non vuoi caricarlo a un servizio terzo per un'analisi preliminare. La rilevazione EOL avviene direttamente nel browser sul testo che incolli.

Limite di scope. Il tool segnala pacchetti EOL e major-version-behind. Non segnala CVE specifiche. Per il check reale di vulnerabilità l'approccio canonico è composer audit da CLI (comando ufficiale Composer dal 2.4, Settembre 2022), roave/security-advisories come dev dependency che blocca l'install di pacchetti con CVE noti, oppure Dependabot/Renovate integrati nel repository.

Pacchetti monitorati per EOL detection

Lista curata di pacchetti PHP popolari con riferimento alle date di end-of-life (security support):

  • laravel/framework: 8.x (EOL 2023-01), 9.x (EOL 2024-02), 10.x (EOL 2025-02), 11.x (LTS attivo)
  • symfony/symfony (e ogni componente symfony/*): 4.x (EOL 2023-11), 5.x (5.4 LTS EOL 2024-11, security extended 2025-11), 6.x (6.4 LTS EOL 2025-11), 7.x (current)
  • phpunit/phpunit: 7.x (EOL 2020), 8.x (EOL 2021), 9.x (EOL 2024-02), 10.x (current)
  • guzzlehttp/guzzle: 6.x (EOL 2022-08, breaking changes per 7.x), 7.x (current)
  • monolog/monolog: 1.x (EOL 2021-09), 2.x (EOL 2025-01), 3.x (current)
  • league/flysystem: 1.x (EOL 2022, breaking changes per 2.x e 3.x), 2.x (EOL 2023), 3.x (current)
  • doctrine/dbal: 2.x (EOL 2023-09), 3.x (current), 4.x (in migrazione)
  • doctrine/orm: 2.x (current LTS), 3.x (in migrazione)
  • illuminate/* (Laravel components standalone): stesso ciclo Laravel
  • twig/twig: 2.x (EOL 2024-04), 3.x (current)

PHP version constraint: il tool segnala se il vincolo include versioni EOL: 7.0/7.1/7.2/7.3 (EOL prima del 2022), 7.4 (EOL 2022-11), 8.0 (EOL 2023-11), 8.1 (security 2025-12). Versioni supportate al momento: 8.2, 8.3, 8.4 (LTS attivo).

Glossario

Termini tecnici usati in questa pagina, spiegati in due righe.

composer.json #
File manifest del progetto PHP. Dichiara nome, autore, dipendenze (require, require-dev), constraint di versione (es. ^11.0), autoload PSR-4. Committato in git.
composer.lock #
File auto-generato da composer install/update. Contiene le versioni esatte risolte di ogni pacchetto + content-hash + timestamp. Garantisce build deterministica fra dev e production. Committato in git (best practice).
Constraint di versione Composer #
Sintassi: ^1.2 = SemVer compatible (>=1.2 <2.0), ~1.2 = patch-level (>=1.2 <1.3), 1.2.* = wildcard, >=1.2 = open. Best practice: ^X.Y per dipendenze stabili, ~X.Y.Z per dipendenze conservative.
EOL (End Of Life) #
Data oltre la quale un pacchetto non riceve più security update. Mantenere pacchetti EOL in production e\' un rischio: vulnerabilita\' nuove non vengono patchate, e in scope NIS2 e\' segnalato come 'igiene cyber inadeguata' (art. 21 c.2 lett. g).
FriendsOfPHP/security-advisories #
Database collaborativo open source di security advisories per pacchetti Composer. Aggiornato giornalmente, formato YAML, base del meta-pacchetto roave/security-advisories.
roave/security-advisories #
Meta-pacchetto Composer (no codice, solo conflict declarations) che blocca l'install di pacchetti con CVE noti. Pattern d\'uso: composer require --dev roave/security-advisories:dev-latest. Zero overhead runtime.
composer audit #
Comando ufficiale Composer (dal 2.4, 2022). Confronta i pacchetti installati con il database CVE FriendsOfPHP. Output: lista CVE attive con severita\'. Da integrare in pipeline CI/CD.
Renovate / Dependabot #
Bot automatici (GitHub Dependabot, Renovate Bot multi-platform) che monitorano dependencies e aprono PR di aggiornamento. Per PHP-Composer: supporto nativo, riconoscono security advisories e prioritizzano security PR.

Domande frequenti sul Composer audit

Differenza fra audit lock e audit json?
composer.lock contiene le versioni esatte risolte: il tool puo\' verificare se la versione X.Y.Z e\' EOL. composer.json contiene solo i constraint (^11.0): il tool non sa quale versione effettiva e\' installata, puo\' segnalare solo problemi a livello di constraint (es. laravel/framework: ^8.0 e\' un constraint EOL perche\' Laravel 8 e\' EOL). Per audit precisi usa il lock.
Il tool segnala CVE specifiche di un pacchetto?
No. Lo abbiamo gia\' detto in questa sezione, ma e\' la domanda piu\' frequente quindi vale la pena sottolinearlo. Il tool conosce solo le date EOL di un set curato di pacchetti popolari. Per CVE check usa composer audit CLI o GitHub Dependabot.
Posso fare audit di un progetto con 200+ pacchetti?
Si\', performance OK fino a 1000 pacchetti. Il bottleneck e\' il rendering della tabella. Per progetti enterprise con 1000+ deps: composer audit CLI e\' piu\' veloce e accurato. Il nostro tool e\' utile per progetti tipici (10-100 deps) di consulenza/PMI.
Cosa fa il tool su un pacchetto sconosciuto (non nel curated set)?
Lo conta nelle statistiche ma non emette finding. Non e\' un finding 'sconosciuto = pericoloso': la maggior parte dei pacchetti e\' sconosciuto al curated set perche\' e\' nicchia, non perche\' e\' cattivo. Per coverage piu\' ampia: composer audit con database CVE completo.
Symfony e\' particolarmente complicato perche\' ha tanti componenti standalone (symfony/console, symfony/yaml, ecc). Li gestite tutti?
Si\'. Il tool considera ogni pacchetto symfony/* con la stessa policy LTS della release principale (Symfony 5.4 LTS = symfony/console:5.4 LTS, ecc). Eccezioni rare (alcuni componenti hanno cicli leggermente diversi) sono ignorate per semplificare.
Il vincolo PHP del progetto e\' <code>>=7.4</code>: cosa segnalate?
Segnaliamo che il vincolo e\' permissivo: includendo PHP 7.4 (EOL 2022-11), il progetto formalmente accetta install su PHP 7.4 anche se la realta\' di production e\' 8.x. Best practice: >=8.2 minimo nel constraint, anche se in production hai 8.4. Comunica intent + previene install accidentale su VPS legacy.
Come integro <code>composer audit</code> in CI/CD?
GitLab CI esempio: composer audit --abandoned=report --format=json nel job di test. Exit code != 0 se ci sono CVE attive. GitHub Actions: stesso comando, opzionalmente con tj-actions/composer-audit. Pre-commit hook: aggiungi composer audit al .husky/pre-commit o git/hooks/pre-commit. Best practice: anche su tag releases, non solo PR.
Differenza fra abbandoned, deprecated e EOL?
Abandoned: il maintainer ha esplicitamente marcato il pacchetto come abbandonato in composer.json (campo abandoned). Deprecated: il pacchetto e\' ancora maintained ma sostituito da una versione successiva (es. league/flysystem 1.x deprecato in favor di 2.x). EOL: il maintainer non rilascia piu\' security update sulla branch (es. Symfony 5.4 dopo nov 2025). Tutti e tre richiedono migration.
Posso usare il tool su composer.json di una libreria (non un'app)?
Si\', funziona uguale. Le librerie tipicamente hanno meno pacchetti (10-30) e sono piu\' attente alla retrocompatibilita\'. I findings tipici: vincolo PHP troppo permissivo (>=7.0 per supportare downstream legacy), version pinning di test framework EOL.
Il tool integra una libreria PHP esterna?
No, JSON parse e\' nativo (JSON.parse) e tutta la logica di matching e\'. ~10KB totali. Il curated EOL set e\' inline nel file JS, aggiornato periodicamente con i rilasci dei progetti monitorati.

Vuoi una review della supply chain del tuo progetto PHP?

Questo tool è un triage. Per un audit completo della supply chain ICT (in scope NIS2 art. 21 c.2 lett. d): inventario delle dipendenze, monitoring CVE in continuo, policy di update, EOL tracking, hardening della pipeline CI/CD, signing dei deploy. Lavoro su progetti Laravel, Symfony e PHP custom.

Audit supply chain PHP

Vuoi una stima realistica per il tuo progetto?

Wizard di 7 domande, 2 minuti, gratuito. Output: range di giorni-uomo, range di prezzo orientativo e raccomandazione di ingaggio. Tariffa di riferimento 300 euro al giorno. Pensato per progetti backend custom, integrazioni, audit di sicurezza o automazione AI.

Calcola il preventivo