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 →

SAPI spiegata: come PHP dialoga con il server web

La SAPI è l'interfaccia tra PHP e server web. Determina come arrivano le richieste, quale php.ini vale e che cosa va riavviato dopo un aggiornamento.

Stato 5 min di letturaConoscere PHP

In breve: SAPI sta per Server Application Programming Interface, l'interfaccia con cui PHP dialoga con il proprio ambiente. Le SAPI tipiche sono fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed e cli per la riga di comando. La SAPI determina come arrivano le richieste, quale php.ini vale e quali processi vanno riavviati dopo un aggiornamento. Con PHP2Shell da essa dipende perfino la classificazione del rischio.

Che cos'è una SAPI?

PHP stesso è un programma che esegue codice. Per poter consegnare pagine web ha bisogno di un collegamento con un server web, con la riga di comando o con un'altra applicazione. Questo collegamento è la SAPI. Riceve i dati della richiesta, li passa alla Zend Engine e restituisce l'output.

Si può immaginare la SAPI come una spina: il motore resta lo stesso, ma a seconda della spina si adatta ad Apache, a Nginx tramite FastCGI, a LiteSpeed o al terminale. Ogni variante ha punti di forza, percorsi di configurazione e insidie propri.

La SAPI decide soprattutto tre aspetti che contano nella quotidianità:

  1. Modello di processo: PHP gira nel server web, come servizio a sé con worker permanenti o come processo di breve durata per ogni chiamata?
  2. Configurazione: quale php.ini viene letto e dove possono stare impostazioni aggiuntive, ad esempio in .htaccess, in un .user.ini o nel pool FPM?
  3. Permessi e separazione: con quale utente gira il codice e più siti web si possono separare l'uno dall'altro?

Nei pannelli di hosting le SAPI compaiono con altri nomi. Plesk parla ad esempio di gestori PHP come «FPM application», «FastCGI application» o «Apache module». Si intendono le stesse modalità di esecuzione descritte in questa pagina. Nel dubbio aiuta il file di verifica più sotto, che mostra il nome effettivo della SAPI.

Quali SAPI di PHP esistono?

Il manuale PHP indica per php_sapi_name() tra l'altro questi valori restituiti: apache, apache2handler, cgi (fino a PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed e phpdbg. L'elenco non è espressamente esaustivo.

Nome SAPI Modalità di esecuzione Uso tipico Modello di processo
fpm-fcgi PHP-FPM Nginx, Apache con proxy_fcgi, pannelli di hosting servizio a sé con pool di worker
apache2handler mod_php server Apache meno recenti, semplici immagini Docker PHP nel processo Apache
cgi-fcgi php-cgi installazioni datate, alcuni setup Windows un processo per richiesta o FastCGI
litespeed LSAPI server web LiteSpeed, molti hoster condivisi processi PHP propri
cli riga di comando cronjob, Composer, script di manutenzione un processo per chiamata
cli-server server web integrato solo sviluppo locale (php -S) un server di sviluppo
embed incorporato PHP in altri programmi dipende dal programma
phpdbg debugger ricerca degli errori interattivo

FrankenPHP è un moderno server di applicazioni che incorpora PHP direttamente. Anch'esso è interessato da PHP2Shell e ha percorsi di aggiornamento propri; dettagli in Mettere in sicurezza FrankenPHP.

Come verificare la SAPI del Suo server

La SAPI di un sito web la si scopre solo tramite il server web, non dalla riga di comando. Basta un piccolo file di verifica:

<?php
// sapi-check.php: dopo la chiamata cancellare subito
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

Da riga di comando si possono rilevare in sola lettura le varianti e i servizi installati:

php -r 'echo PHP_SAPI, PHP_EOL;'          # sempre "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # versioni FPM installate
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php caricato?

Perché ogni SAPI può avere il proprio php.ini

Secondo il manuale PHP, PHP cerca prima un file php-SAPI.ini, ad esempio php-cli.ini, e solo dopo php.ini. Distribuzioni come Debian e Ubuntu vanno oltre e creano cartelle proprie per ogni SAPI, ad esempio /etc/php/8.3/fpm/ e /etc/php/8.3/cli/.

Cambia anche il momento: con i moduli del server, secondo il manuale PHP legge la configurazione una sola volta all'avvio del server web, con CGI e CLI a ogni chiamata. Chi modifica un'impostazione deve quindi sapere quale SAPI è interessata. Approfondimenti in Il php.ini spiegato.

SAPI e sicurezza: che cosa ha mostrato PHP2Shell

Secondo le segnalazioni, PHP2Shell interessa PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP e LiteSpeed. Il team PHP classifica il rischio più alto per mod_php, perché lì è stato dimostrato un exploit prima che giri il codice dell'applicazione. I motivi sono in Perché mod_php porta il rischio più alto.

Per l'esercizio la SAPI significa soprattutto una cosa: determina che cosa va riavviato dopo l'aggiornamento.

  1. PHP-FPM: tutti i pool e i worker di ogni versione installata
  2. mod_php: l'intero servizio Apache, non un semplice reload
  3. php-cgi e setup FastCGI: tutti i processi PHP rimasti
  4. LiteSpeed: i processi PHP del server web secondo le istruzioni del fornitore
  5. CLI: nessun processo permanente, ma aggiornare anche il pacchetto, perché le verifiche siano corrette

A medio termine conviene abbandonare mod_php. Il manuale PHP raccomanda per le nuove installazioni Apache PHP-FPM con mod_proxy_fcgi. Le basi sono descritte in PHP-FPM spiegato.

Come aiuta concretamente PHP SOS?

  • Rilevare le SAPI: accertiamo per ogni server quali modalità di esecuzione e versioni di PHP siano effettivamente attive.
  • Riavviare correttamente: tramite il servizio di patch PHP aggiorniamo ogni SAPI e documentiamo il riavvio di tutti i processi.
  • Assegnare la configurazione: mostriamo quale php.ini e quali impostazioni del pool valgono per il Suo sito web.
  • Pianificare il passaggio: dove gira mod_php o php-cgi pianifichiamo e testiamo il passaggio a PHP-FPM.

Domande frequenti

Come scopro quale SAPI usa il mio sito web?

Nel modo più affidabile con un file di verifica depositato per breve tempo, che mostra PHP_SAPI o php_sapi_name(), richiamato tramite il server web. Da riga di comando ottiene sempre cli, il che non dice nulla sul sito web. Poi cancelli subito il file di verifica.

Qual è la SAPI più sicura?

Nessuna è sicura di per sé. PHP-FPM offre però il maggior numero di strumenti di separazione: pool propri, utenti propri e impostazioni bloccate per ogni sito web. Il manuale PHP consiglia espressamente, per le nuove installazioni Apache, PHP-FPM al posto di mod_php.

La versione a riga di comando di PHP è interessata da PHP2Shell?

Le segnalazioni note citano PHP-FPM, mod_php, php-cgi, FrankenPHP e LiteSpeed. La CLI non elabora richieste dalla rete. Di solito però proviene dallo stesso repository di pacchetti e andrebbe sempre aggiornata insieme, se non altro perché i comandi di verifica mostrino lo stato corretto.

Un server può usare più SAPI contemporaneamente?

Sì, è anzi la norma. Quasi ogni server ha, accanto alla SAPI web, la CLI per i cronjob e la manutenzione. Spesso girano in parallelo anche più versioni di PHP-FPM. Ciascuna va aggiornata e riavviata singolarmente.

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