Situazione attuale: PHP2Shell. Due vulnerabilità critiche di PHP (CVSS 9,2) consentono codice dannoso senza autenticazione. Patch dal 21/10/2026.Che cosa fare ora →

Capire le estensioni PHP (extension)

Le estensioni portano in PHP driver di database, cifratura o cache. Ecco come si distinguono i tipi, come si caricano e si verificano e che cosa significano per aggiornamenti e hardening.

Stato 5 min di letturaConoscere PHP

In breve: le estensioni PHP (extension) sono moduli in C che aggiungono funzioni a PHP, ad esempio driver di database (PDO), cifratura (Sodium, OpenSSL) o la cache di bytecode OPcache. Il manuale PHP distingue estensioni core, bundled, external e PECL. Si caricano tramite extension o zend_extension nel php.ini. Ogni estensione gira nel processo PHP con i suoi permessi. Perciò vale: caricare solo ciò che serve e aggiornare insieme a PHP.

Che cosa sono le extension di PHP?

Il nucleo di PHP, la Zend Engine, può eseguire codice, ma molto di ciò di cui le applicazioni hanno bisogno si trova nelle estensioni. Sono scritte in C e vengono compilate stabilmente in PHP oppure caricate all'avvio come libreria condivisa (.so su Linux, .dll su Windows).

Importante per chi decide: le estensioni non sono plugin dell'applicazione, ma parte del runtime PHP. Le installa l'hoster o l'amministratore del server, non l'agenzia nel CMS. Se manca un'estensione, l'applicazione di solito segnala un errore durante l'installazione o l'aggiornamento.

Altrettanto importante è la distinzione dai pacchetti Composer. Composer installa librerie scritte in PHP che stanno nella cartella del progetto, ad esempio un pacchetto per la posta o per i PDF. Le estensioni invece sono codice compilato che viene caricato all'avvio di PHP e vale per tutte le applicazioni sul server. Molti pacchetti Composer presuppongono determinate estensioni e lo annotano nel loro composer.json con voci come ext-intl o ext-sodium. Chi vuole verificare se un progetto trova tutte le estensioni necessarie può eseguire composer check-platform-reqs nella cartella del progetto.

Quali tipi di estensioni esistono?

Il manuale PHP assegna le estensioni a quattro gruppi:

Gruppo Significato secondo il manuale Esempi dal manuale
Core parte del nucleo di PHP, non disattivabile Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings
Bundled fornite con PHP BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions
External fornite con PHP, richiedono librerie esterne cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip
PECL disponibili tramite PECL, in parte con librerie esterne APCu, Memcached, MongoDB, Yaml

L'assegnazione può cambiare. Con PHP 8.4, secondo la pagina di rilascio, le estensioni IMAP, OCI8, PDO_OCI e pspell sono state tolte dalla dotazione di serie e spostate in PECL. Chi le usa ha bisogno dopo l'upgrade di un'installazione separata, che va a sua volta mantenuta.

Come si caricano le estensioni?

Le estensioni condivise vengono caricate, secondo il manuale, tramite la direttiva extension nel php.ini; le estensioni Zend, che intervengono più a fondo nella engine, tramite zend_extension. Entrambe possono stare solo nel php.ini. La directory la stabilisce extension_dir, per cui il manuale raccomanda un percorso assoluto.

; estensioni normali
extension=pdo_mysql
extension=sodium
extension=intl

; estensione Zend: OPcache (caricare prima di Xdebug, se entrambi sono attivi)
zend_extension=opcache

Distribuzioni come Debian e Ubuntu creano per ogni estensione un piccolo file .ini proprio nella directory di scansione, ad esempio in /etc/php/8.3/mods-available/, e lo attivano per ogni SAPI con phpenmod e phpdismod. Come PHP legge questi file lo spiega Il php.ini spiegato.

Le estensioni si installano di solito tramite la gestione dei pacchetti, ad esempio come pacchetto php8.3-intl. Le estensioni PECL si possono compilare con pecl o phpize. Secondo il manuale PECL è dichiarato obsoleto; si raccomanda il PHP Installer for Extensions (PIE). Chi compila PHP interamente da sé trova indicazioni in Compilare PHP dal codice sorgente.

Verificare le estensioni: quali sono davvero caricate?

I comandi seguenti sono di sola lettura. Tenga presente che la riga di comando può caricare estensioni diverse dal sito web.

php -m                              # moduli della CLI
php-fpm8.3 -m                       # moduli di PHP-FPM 8.3 (nome a seconda della distribuzione)
php --re sodium | head -n 5         # funzioni di un'estensione
php --ri opcache                    # configurazione di un'estensione
php -r 'var_dump(extension_loaded("intl"));'

Nel codice le applicazioni verificano con extension_loaded() se un'estensione è presente e con get_loaded_extensions() quali sono caricate:

<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';

Estensioni e sicurezza: meno è meglio

Le estensioni girano nello stesso processo di PHP e con gli stessi permessi. Un errore in un'estensione può quindi pesare quanto un errore nel nucleo. Ne derivano quattro regole:

  1. Caricare solo ciò che serve. Ogni estensione aggiuntiva amplia la superficie di attacco. Confronti il Suo elenco con i requisiti di sistema dell'applicazione.
  2. Aggiornare insieme a PHP. Le estensioni fornite arrivano con l'aggiornamento di PHP. Le estensioni PECL e di terzi richiedono aggiornamenti propri e devono essere compatibili con la nuova versione di PHP.
  3. Strumenti di sviluppo non in produzione. Debugger e profiler come Xdebug appartengono solo agli ambienti di sviluppo.
  4. Bloccare le funzioni in modo mirato. Dove le estensioni portano funzioni per i comandi di sistema, aiuta Usare correttamente disable_functions.

Con PHP2Shell le vulnerabilità si trovano nel nucleo di PHP, non in un'estensione. Disattivare moduli non le chiude; serve l'aggiornamento a 8.5.12, 8.4.27, 8.3.36 o 8.2.35 con riavvio di tutti i processi PHP. Dopo l'aggiornamento dovrebbe verificare che tutte le estensioni vengano caricate di nuovo, perché i moduli mancanti si notano spesso solo con determinate funzioni. Come tenere sotto controllo le dipendenze in modo duraturo lo descrive Mantenere aggiornate le dipendenze.

Come aiuta concretamente PHP SOS?

  • Rilevare lo stato attuale: elenchiamo per ogni SAPI tutte le estensioni caricate con provenienza e versione.
  • Fare pulizia: confrontiamo l'elenco con il fabbisogno della Sua applicazione e, dopo un test, disattiviamo il superfluo.
  • Aggiornare: nell'ambito dell'hardening del server portiamo PHP e tutte le estensioni di terzi a uno stato mantenuto.
  • Verificare dopo gli aggiornamenti: controlliamo che dopo ogni aggiornamento di PHP tutti i moduli necessari siano di nuovo caricati.

Domande frequenti

Qual è la differenza tra extension e zend_extension?

Con extension PHP carica le estensioni normali come i driver di database. Con zend_extension vengono caricate, secondo il manuale, estensioni Zend che intervengono più a fondo nella engine, ad esempio OPcache o Xdebug. Entrambe le direttive possono stare solo nel php.ini.

Come vedo quali estensioni sono caricate?

Da riga di comando con php -m, per il sito web con la funzione get_loaded_extensions() in un file di verifica temporaneo oppure con php-fpm -m della rispettiva versione. Tenga presente che CLI e SAPI web possono caricare estensioni diverse.

Che cosa sono PECL e PIE?

PECL è un elenco di estensioni PHP messe a disposizione tramite il sistema di pacchetti PEAR. Secondo il manuale PHP, PECL è dichiarato obsoleto; si raccomanda invece il PHP Installer for Extensions (PIE).

Disattivare un'estensione chiude PHP2Shell?

No. Le vulnerabilità di PHP2Shell si trovano nel nucleo di PHP, non in un'estensione disattivabile. Meno estensioni riducono in generale la superficie di attacco, ma non sostituiscono l'aggiornamento a una versione corretta.

Fonti

Contatto immediato

Ogni ora conta. Ci scriva adesso.

Descriva brevemente sistema, versione di PHP e quanto osservato. Ci faremo sentire, chiariremo la situazione e lavoreremo da remoto fino alla chiusura e alla documentazione dell'incidente.

Aiuto immediato