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 →

SAPI explicat: cum vorbește PHP cu serverul web

SAPI este interfața dintre PHP și serverul web. Ea determină cum ajung cererile, ce php.ini se aplică și ce trebuie repornit după o actualizare.

Stadiu 5 min de cititCunoștințe PHP

Pe scurt: SAPI înseamnă Server Application Programming Interface, interfața prin care PHP comunică cu mediul său. SAPI-uri tipice sunt fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed și cli pentru linia de comandă. SAPI determină cum ajung cererile, ce php.ini se aplică și ce procese trebuie repornite după o actualizare. La PHP2Shell, de ea depinde chiar și încadrarea riscului.

Ce este un SAPI?

PHP însuși este un program care execută cod. Pentru a putea livra pagini web, are nevoie de o legătură cu un server web, cu linia de comandă sau cu o altă aplicație. Această legătură este SAPI. Ea primește datele cererii, le transmite către Zend Engine și returnează ieșirea.

Vă puteți imagina SAPI ca pe un ștecher: motorul rămâne același, dar în funcție de ștecher se potrivește la Apache, la Nginx prin FastCGI, la LiteSpeed sau la terminal. Fiecare variantă are punctele ei forte, propriile căi de configurare și propriile capcane.

SAPI decide mai ales asupra a trei lucruri care contează în practică:

  1. Modelul de procese: Rulează PHP în serverul web, ca serviciu separat cu workeri permanenți sau ca proces de scurtă durată pentru fiecare apel?
  2. Configurația: Ce php.ini este citit și unde pot fi setări suplimentare, de exemplu în .htaccess, într-un .user.ini sau în pool-ul FPM?
  3. Drepturi și separare: Sub ce utilizator rulează codul și pot fi separate mai multe site-uri unele de altele?

În panourile de hosting, SAPI apar sub alte nume. Plesk vorbește, de exemplu, de handlere PHP precum „FPM application”, „FastCGI application” sau „Apache module”. Sunt aceleași moduri de operare descrise pe această pagină. La nevoie, ajută fișierul de verificare de mai jos, care afișează numele real al SAPI.

Ce SAPI-uri PHP există?

Manualul PHP menționează pentru php_sapi_name(), printre altele, aceste valori returnate: apache, apache2handler, cgi (până la PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed și phpdbg. Lista nu este, în mod explicit, exhaustivă.

Nume SAPI Mod de operare Utilizare tipică Model de procese
fpm-fcgi PHP-FPM Nginx, Apache cu proxy_fcgi, panouri de hosting serviciu separat cu pool-uri de workeri
apache2handler mod_php servere Apache mai vechi, imagini Docker simple PHP în procesul Apache
cgi-fcgi php-cgi instalări vechi, unele configurații Windows proces pentru fiecare cerere sau FastCGI
litespeed LSAPI server web LiteSpeed, mulți furnizori de shared hosting procese PHP proprii
cli linia de comandă cronjob-uri, Composer, scripturi de mentenanță un proces pentru fiecare apel
cli-server server web integrat doar dezvoltare locală (php -S) un server de dezvoltare
embed încorporat PHP în alte programe în funcție de program
phpdbg depanator căutarea erorilor interactiv

FrankenPHP este un server de aplicații modern care încorporează PHP direct. Este de asemenea afectat de PHP2Shell și are căi proprii de actualizare; detalii la Securizarea FrankenPHP.

Cum verificați SAPI-ul serverului dumneavoastră

SAPI-ul unui site îl aflați doar prin serverul web, nu prin linia de comandă. Un mic fișier de verificare este suficient:

<?php
// sapi-check.php: ștergeți-l imediat după apelare
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

În linia de comandă, variantele și serviciile instalate pot fi aflate în modul doar de citire:

php -r 'echo PHP_SAPI, PHP_EOL;'          # întotdeauna "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # versiunile FPM instalate
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php încărcat?

De ce fiecare SAPI poate avea propriul php.ini

Potrivit manualului PHP, PHP caută mai întâi un fișier php-SAPI.ini, deci de exemplu php-cli.ini, și abia apoi php.ini. Distribuții precum Debian și Ubuntu merg mai departe și creează directoare separate pentru fiecare SAPI, de exemplu /etc/php/8.3/fpm/ și /etc/php/8.3/cli/.

Diferă și momentul: la modulele de server, PHP citește configurația, potrivit manualului, o singură dată la pornirea serverului web, la CGI și CLI la fiecare apel. Cine modifică o setare trebuie deci să știe ce SAPI este afectat. Mai multe la php.ini explicat.

SAPI și securitate: ce a arătat PHP2Shell

Potrivit rapoartelor, PHP2Shell afectează PHP-FPM, Apache cu mod_php, php-cgi, FrankenPHP și LiteSpeed. Echipa PHP încadrează riscul cel mai sus la mod_php, deoarece acolo a fost demonstrat un exploit înainte ca vreun cod al aplicației să ruleze. Motivele se află la De ce mod_php prezintă cel mai mare risc.

Pentru operare, SAPI înseamnă mai ales un lucru: determină ce trebuie repornit după actualizare.

  1. PHP-FPM: toate pool-urile și toți workerii fiecărei versiuni instalate
  2. mod_php: întregul serviciu Apache, nu doar un reload
  3. php-cgi și configurațiile FastCGI: toate procesele PHP rămase
  4. LiteSpeed: procesele PHP ale serverului web, conform instrucțiunilor furnizorului
  5. CLI: nu sunt procese permanente, dar actualizați și pachetul, pentru ca verificările să fie corecte

Pe termen mediu merită trecerea de la mod_php. Manualul PHP recomandă pentru instalările Apache noi PHP-FPM cu mod_proxy_fcgi. Bazele le descrie PHP-FPM explicat.

Cum ajută PHP SOS concret?

  • Inventarierea SAPI: Stabilim pentru fiecare server ce moduri de operare și ce versiuni PHP sunt efectiv active.
  • Repornire corectă: Prin serviciul de patch PHP actualizăm fiecare SAPI și dovedim repornirea tuturor proceselor.
  • Atribuirea configurației: Arătăm ce php.ini și ce setări de pool se aplică site-ului dumneavoastră.
  • Planificarea trecerii: Acolo unde rulează mod_php sau php-cgi, planificăm și testăm trecerea la PHP-FPM.

Întrebări frecvente

Cum aflu ce SAPI folosește site-ul meu?

Cel mai sigur cu un fișier de verificare depus pentru scurt timp, care afișează PHP_SAPI sau php_sapi_name() și este apelat prin serverul web. În linia de comandă obțineți mereu cli, ceea ce nu spune nimic despre site. Apoi ștergeți imediat fișierul de verificare.

Care SAPI este cel mai sigur?

Niciunul nu este sigur de la sine. PHP-FPM oferă însă cele mai multe instrumente de separare: pool-uri proprii, utilizatori și setări blocate pentru fiecare site. Manualul PHP recomandă explicit PHP-FPM în locul mod_php pentru instalările Apache noi.

Este afectată de PHP2Shell versiunea PHP din linia de comandă?

Rapoartele cunoscute menționează PHP-FPM, mod_php, php-cgi, FrankenPHP și LiteSpeed. CLI nu procesează cereri din rețea. De obicei provine însă din aceeași sursă de pachete și ar trebui actualizat mereu, chiar și numai pentru ca verificările să arate starea corectă.

Poate un server să folosească mai multe SAPI simultan?

Da, este chiar obișnuit. Aproape orice server are, pe lângă SAPI-ul web, CLI pentru cronjob-uri și mentenanță. Adesea rulează suplimentar în paralel mai multe versiuni PHP-FPM. Fiecare trebuie actualizată și repornită separat.

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