Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

SAPI objašnjen: kako PHP razgovara s web-poslužiteljem

SAPI je sučelje između PHP-a i web-poslužitelja. Određuje kako stižu zahtjevi, koji php.ini vrijedi i što se nakon ažuriranja mora ponovno pokrenuti.

Stanje 4 min čitanjaPHP znanje

Ukratko: SAPI znači Server Application Programming Interface, sučelje putem kojeg PHP razgovara sa svojim okruženjem. Tipični SAPI-ji su fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed i cli za naredbeni redak. SAPI određuje kako zahtjevi stižu, koji php.ini vrijedi i koje procese treba ponovno pokrenuti nakon ažuriranja. Kod PHP2Shella o njemu ovisi čak i procjena rizika.

Što je SAPI?

PHP je sam po sebi program koji izvršava kod. Da bi mogao isporučivati web-stranice, treba vezu s web-poslužiteljem, naredbenim retkom ili nekom drugom aplikacijom. Ta veza je SAPI. Prima podatke zahtjeva, prosljeđuje ih Zend Engineu i vraća izlaz.

SAPI se može zamisliti kao utikač: motor ostaje isti, ali ovisno o utikaču pristaje na Apache, na Nginx putem FastCGI-ja, na LiteSpeed ili na terminal. Svaka izvedba ima vlastite prednosti, vlastite putove konfiguracije i vlastite zamke.

SAPI ponajprije odlučuje o tri stvari koje su važne u svakodnevici:

  1. Model procesa: Radi li PHP unutar web-poslužitelja, kao zasebna usluga s trajnim workerima ili kao kratkotrajan proces po pozivu?
  2. Konfiguracija: Koji se php.ini čita i gdje smiju stajati dodatne postavke, na primjer u .htaccess, u .user.ini ili u FPM poolu?
  3. Prava i razdvajanje: Pod kojim korisnikom radi kod i mogu li se više web-stranica međusobno razdvojiti?

U hosting panelima SAPI-ji se pojavljuju pod drugim nazivima. Plesk, na primjer, govori o PHP rukovateljima poput „FPM application“, „FastCGI application“ ili „Apache module“. Misli se na iste načine rada koje opisuje ova stranica. U slučaju sumnje pomaže probna datoteka u nastavku, koja prikazuje stvarni naziv SAPI-ja.

Koji PHP SAPI-ji postoje?

PHP priručnik za php_sapi_name() među ostalim navodi ove povratne vrijednosti: apache, apache2handler, cgi (do PHP-a 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed i phpdbg. Popis izričito nije konačan.

Naziv SAPI-ja Način rada Tipična uporaba Model procesa
fpm-fcgi PHP-FPM Nginx, Apache s proxy_fcgi, hosting paneli zasebna usluga s poolovima workera
apache2handler mod_php stariji Apache poslužitelji, jednostavne Docker slike PHP u Apacheovu procesu
cgi-fcgi php-cgi naslijeđene instalacije, neke Windows postavke proces po zahtjevu ili FastCGI
litespeed LSAPI LiteSpeed web-poslužitelj, mnogi shared hosteri vlastiti PHP procesi
cli naredbeni redak cron zadaci, Composer, skripte za održavanje jedan proces po pozivu
cli-server ugrađeni web-poslužitelj samo lokalni razvoj (php -S) razvojni poslužitelj
embed ugrađen PHP u drugim programima ovisi o programu
phpdbg debugger traženje pogrešaka interaktivno

FrankenPHP je moderan aplikacijski poslužitelj koji PHP izravno ugrađuje. Također je pogođen PHP2Shellom i ima vlastite putove ažuriranja; pojedinosti u članku Osiguravanje FrankenPHP-a.

Kako provjeriti SAPI svojeg poslužitelja

SAPI web-stranice saznajete samo putem web-poslužitelja, a ne putem naredbenog retka. Dovoljna je mala probna datoteka:

<?php
// sapi-check.php: nakon poziva odmah izbrisati
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

U naredbenom retku instalirane izvedbe i usluge mogu se evidentirati samo čitanjem:

php -r 'echo PHP_SAPI, PHP_EOL;'          # uvijek "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # instalirane FPM verzije
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # je li mod_php učitan?

Zašto svaki SAPI može imati vlastiti php.ini

Prema PHP priručniku PHP najprije traži datoteku php-SAPI.ini, dakle na primjer php-cli.ini, a tek potom php.ini. Distribucije poput Debiana i Ubuntua idu dalje i za svaki SAPI stvaraju vlastite mape, na primjer /etc/php/8.3/fpm/ i /etc/php/8.3/cli/.

Razlikuje se i trenutak: kod modula poslužitelja PHP konfiguraciju prema priručniku čita samo jednom pri pokretanju web-poslužitelja, kod CGI-ja i CLI-ja pri svakom pozivu. Tko mijenja postavku, mora stoga znati koji je SAPI pogođen. Više u članku php.ini objašnjen.

SAPI i sigurnost: što je pokazao PHP2Shell

Prema objavama PHP2Shellom su pogođeni PHP-FPM, Apache s mod_php-om, php-cgi, FrankenPHP i LiteSpeed. PHP tim rizik kod mod_php-a ocjenjuje najvišim jer je tamo pokazan exploit prije nego što se pokrene kod aplikacije. Razlozi su na stranici Zašto mod_php nosi najviši rizik.

Za rad SAPI znači ponajprije jedno: određuje što se nakon ažuriranja mora ponovno pokrenuti.

  1. PHP-FPM: svi poolovi i workeri svake instalirane verzije
  2. mod_php: cijela Apache usluga, ne samo reload
  3. php-cgi i FastCGI postavke: svi preostali PHP procesi
  4. LiteSpeed: PHP procesi web-poslužitelja prema uputama proizvođača
  5. CLI: nema trajnih procesa, ali paket ažurirajte zajedno s ostalima kako bi provjere bile točne

Srednjoročno se isplati prijeći s mod_php-a. PHP priručnik za nove instalacije Apachea preporučuje PHP-FPM s mod_proxy_fcgi. Osnove opisuje članak PHP-FPM objašnjen.

Kako PHP SOS konkretno pomaže?

  • Evidentirati SAPI-je: Za svaki poslužitelj utvrđujemo koji su načini rada i PHP verzije stvarno aktivni.
  • Ispravno ponovno pokrenuti: Putem PHP Patch usluge ažuriramo svaki SAPI i dokazujemo ponovno pokretanje svih procesa.
  • Pridružiti konfiguraciju: Pokazujemo koji php.ini i koje postavke poola vrijede za Vašu web-stranicu.
  • Planirati prelazak: Gdje radi mod_php ili php-cgi, planiramo i testiramo prelazak na PHP-FPM.

Česta pitanja

Kako saznati koji SAPI koristi moja web-stranica?

Najpouzdanije kratkotrajno postavljenom probnom datotekom koja ispisuje PHP_SAPI ili php_sapi_name() i poziva se putem web-poslužitelja. U naredbenom retku uvijek dobivate cli, što o web-stranici ne govori ništa. Probnu datoteku nakon toga odmah izbrišite.

Koji je SAPI najsigurniji?

Nijedan nije sam po sebi siguran. No PHP-FPM nudi najviše alata za razdvajanje: vlastite poolove, korisnike i zaključane postavke po web-stranici. PHP priručnik za nove instalacije Apachea izričito preporučuje PHP-FPM umjesto mod_php-a.

Pogađa li PHP2Shell inačicu PHP-a za naredbeni redak?

Poznate objave navode PHP-FPM, mod_php, php-cgi, FrankenPHP i LiteSpeed. CLI ne obrađuje zahtjeve iz mreže. No najčešće potječe iz istog izvora paketa i uvijek ga treba ažurirati zajedno s ostalima, već zato da naredbe za provjeru prikazuju ispravno stanje.

Može li poslužitelj istodobno koristiti više SAPI-ja?

Da, to je čak uobičajeno. Gotovo svaki poslužitelj uz web SAPI ima i CLI za cron zadatke i održavanje. Često usporedno rade i nekoliko verzija PHP-FPM-a. Svaku od njih treba zasebno ažurirati i ponovno pokrenuti.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć