Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

SAPI razložen: kako PHP govori s spletnim strežnikom

SAPI je vmesnik med PHP in spletnim strežnikom. Določa, kako zahteve prispejo, katera php.ini velja in kaj je treba po posodobitvi znova zagnati.

Stanje 4 min branjaZnanje o PHP

Na kratko: SAPI pomeni Server Application Programming Interface, vmesnik, prek katerega PHP komunicira z okoljem. Značilni SAPI so fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed in cli za ukazno vrstico. SAPI določa, kako zahteve prispejo, katera php.ini velja in kateri procesi se morajo po posodobitvi znova zagnati. Pri PHP2Shell je od tega odvisna celo uvrstitev tveganja.

Kaj je SAPI?

PHP sam je program, ki izvaja kodo. Da lahko streže spletne strani, potrebuje povezavo s spletnim strežnikom, z ukazno vrstico ali z drugo aplikacijo. Ta povezava je SAPI. Sprejme podatke zahteve, jih preda Zend Engine in vrne izpis.

SAPI si lahko predstavljamo kot vtikač: motor ostane isti, glede na vtikač pa ustreza Apacheu, Nginxu prek FastCGI, LiteSpeedu ali terminalu. Vsaka različica ima lastne prednosti, lastne poti konfiguracije in lastne pasti.

SAPI odloča predvsem o treh stvareh, ki štejejo v vsakdanjem delu:

  1. Procesni model: ali PHP teče v spletnem strežniku, kot samostojna storitev s trajnimi workerji ali kot kratkoživ proces za vsak klic?
  2. Konfiguracija: katera php.ini se prebere in kje smejo stati dodatne nastavitve, na primer v .htaccess, v .user.ini ali v poolu FPM?
  3. Pravice in ločevanje: pod katerim uporabnikom teče koda in ali je mogoče več spletnih strani med seboj ločiti?

V panelih za gostovanje se SAPI pojavljajo pod drugimi imeni. Plesk na primer govori o handlerjih PHP, kot so „FPM application“, „FastCGI application“ ali „Apache module“. Mišljeni so isti načini delovanja, ki jih opisuje ta stran. Če je dvom, pomaga spodnja preizkusna datoteka, ki prikaže dejansko ime SAPI.

Kateri SAPI za PHP obstajajo?

Priročnik PHP za php_sapi_name() med drugim navaja te vrnjene vrednosti: apache, apache2handler, cgi (do PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed in phpdbg. Seznam izrecno ni popoln.

Ime SAPI Način delovanja Značilna uporaba Procesni model
fpm-fcgi PHP-FPM Nginx, Apache s proxy_fcgi, paneli za gostovanje samostojna storitev s pooli workerjev
apache2handler mod_php starejši strežniki Apache, preprosti image Docker PHP v procesu Apache
cgi-fcgi php-cgi stare namestitve, nekatere postavitve Windows proces za vsako zahtevo ali FastCGI
litespeed LSAPI spletni strežnik LiteSpeed, številni ponudniki skupnega gostovanja lastni procesi PHP
cli ukazna vrstica cron opravila, Composer, skripte za vzdrževanje en proces na klic
cli-server vgrajeni spletni strežnik samo lokalni razvoj (php -S) razvojni strežnik
embed vdelan PHP v drugih programih odvisno od programa
phpdbg razhroščevalnik iskanje napak interaktivno

FrankenPHP je sodoben aplikacijski strežnik, ki PHP vdela neposredno. Tudi nanj vpliva PHP2Shell in ima lastne poti posodobitev; podrobnosti na strani Zavarovanje FrankenPHP.

Tako preverite SAPI svojega strežnika

SAPI spletne strani ugotovite samo prek spletnega strežnika, ne prek ukazne vrstice. Zadošča majhna preizkusna datoteka:

<?php
// sapi-check.php: po klicu takoj znova izbrišite
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

V ukazni vrstici je nameščene različice in storitve mogoče zajeti samo z branjem:

php -r 'echo PHP_SAPI, PHP_EOL;'          # vedno "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # nameščene različice FPM
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # ali je mod_php naložen?

Zakaj ima lahko vsak SAPI svojo php.ini

Po priročniku PHP najprej poišče datoteko php-SAPI.ini, torej na primer php-cli.ini, šele nato php.ini. Distribucije, kot sta Debian in Ubuntu, gredo dlje in za vsak SAPI ustvarijo lastne mape, na primer /etc/php/8.3/fpm/ in /etc/php/8.3/cli/.

Razlikuje se tudi trenutek: pri strežniških modulih PHP konfiguracijo po priročniku prebere samo enkrat ob zagonu spletnega strežnika, pri CGI in CLI ob vsakem klicu. Kdor spreminja nastavitev, mora zato vedeti, kateri SAPI je prizadet. Več na strani php.ini razložena.

SAPI in varnost: kaj je pokazal PHP2Shell

Po poročilih so zaradi PHP2Shell prizadeti PHP-FPM, Apache z mod_php, php-cgi, FrankenPHP in LiteSpeed. Ekipa PHP tveganje pri mod_php ocenjuje kot najvišje, ker je bil tam prikazan exploit, še preden teče koda aplikacije. Razlogi so na strani Zakaj je tveganje pri mod_php najvišje.

Za obratovanje SAPI pomeni predvsem eno: določa, kaj je treba po posodobitvi znova zagnati.

  1. PHP-FPM: vsi pooli in workerji vsake nameščene različice
  2. mod_php: celotna storitev Apache, ne samo reload
  3. php-cgi in postavitve FastCGI: vsi preostali procesi PHP
  4. LiteSpeed: procesi PHP spletnega strežnika po navodilih ponudnika
  5. CLI: ni trajnih procesov, a posodobite tudi paket, da preverjanja držijo

Srednjeročno se splača prehod stran od mod_php. Priročnik PHP za nove namestitve Apacheja priporoča PHP-FPM z mod_proxy_fcgi. Osnove opisuje stran PHP-FPM razložen.

Kako PHP SOS pomaga konkretno?

  • Zajem SAPI: za vsak strežnik ugotovimo, kateri načini delovanja in različice PHP so dejansko aktivni.
  • Pravilen ponovni zagon: prek storitve popravljanja PHP posodobimo vsak SAPI in dokažemo ponovni zagon vseh procesov.
  • Razvrstitev konfiguracije: pokažemo, katera php.ini in katere nastavitve poola veljajo za vašo spletno stran.
  • Načrtovanje prehoda: kjer teče mod_php ali php-cgi, prehod na PHP-FPM načrtujemo in preizkusimo.

Pogosta vprašanja

Kako ugotovim, kateri SAPI uporablja moja spletna stran?

Najzanesljiveje s kratek čas odloženo preizkusno datoteko, ki izpiše PHP_SAPI ali php_sapi_name() in jo pokličete prek spletnega strežnika. V ukazni vrstici vedno dobite cli, kar o spletni strani ne pove nič. Preizkusno datoteko nato takoj izbrišite.

Kateri SAPI je najvarnejši?

Noben ni sam po sebi varen. PHP-FPM pa ponuja največ orodij za ločevanje: lastne poole, uporabnike in zaklenjene nastavitve za vsako spletno stran. Priročnik PHP za nove namestitve Apacheja izrecno svetuje PHP-FPM namesto mod_php.

Ali je različica PHP2Shell za ukazno vrstico prizadeta?

Znana poročila navajajo PHP-FPM, mod_php, php-cgi, FrankenPHP in LiteSpeed. CLI ne obdeluje zahtev iz omrežja. Vendar praviloma izvira iz istega vira paketov in jo je treba vedno posodobiti tudi, že zato, da ukazi za preverjanje prikažejo pravo stanje.

Ali lahko strežnik hkrati uporablja več SAPI?

Da, to je celo običajno. Skoraj vsak strežnik ima poleg spletnega SAPI še CLI za cron opravila in vzdrževanje. Pogosto vzporedno tečeta tudi dve ali več različic PHP-FPM. Vsako od njih je treba posodobiti in znova zagnati posebej.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč