Aktuális helyzet: PHP2Shell. Két kritikus PHP-rés (CVSS 9,2) lehetővé teszi kártékony kód futtatását bejelentkezés nélkül. Javítások 2026. 10. 21. óta.Mi a teendő most →

A SAPI elmagyarázva: hogyan beszél a PHP a webszerverrel

A SAPI a PHP és a webszerver közötti felület. Ez határozza meg, hogyan érkeznek a kérések, melyik php.ini érvényes, és mit kell frissítés után újraindítani.

Állapot 4 perc olvasási időPHP-tudástár

Röviden: A SAPI a Server Application Programming Interface rövidítése, vagyis az a felület, amelyen keresztül a PHP a környezetével kommunikál. Tipikus SAPI-k az fpm-fcgi (PHP-FPM), az apache2handler (mod_php), a cgi-fcgi (php-cgi), a litespeed és a cli a parancssorhoz. A SAPI határozza meg, hogyan érkeznek a kérések, melyik php.ini érvényes, és mely folyamatokat kell frissítés után újraindítani. A PHP2Shell esetében még a kockázati besorolás is ettől függ.

Mi az a SAPI?

A PHP maga egy program, amely kódot hajt végre. Hogy weboldalakat szolgáltathasson ki, kapcsolat kell egy webszerverhez, a parancssorhoz vagy egy másik alkalmazáshoz. Ez a kapcsolat a SAPI. Átveszi a kérés adatait, továbbadja a Zend Engine-nek, és visszaadja a kimenetet.

A SAPI-t egy csatlakozódugóhoz lehet hasonlítani: a motor ugyanaz marad, de a dugótól függően illeszkedik az Apache-hoz, FastCGI-n át az Nginxhez, a LiteSpeedhez vagy a terminálhoz. Minden változatnak megvannak a saját erősségei, konfigurációs útjai és buktatói.

A SAPI főként három, a mindennapokban számító dologról dönt:

  1. Folyamatmodell: A PHP a webszerverben fut, önálló szolgáltatásként tartós workerekkel, vagy hívásonként rövid életű folyamatként?
  2. Konfiguráció: Melyik php.ini kerül beolvasásra, és hol szerepelhetnek további beállítások, például a .htaccess-ben, egy .user.ini-ben vagy az FPM-poolban?
  3. Jogok és elkülönítés: Melyik felhasználó alatt fut a kód, és szétválaszthatók-e egymástól a weboldalak?

A tárhelyvezérlő paneleken a SAPI-k más néven jelennek meg. A Plesk például olyan PHP-kezelőkről beszél, mint a „FPM application”, a „FastCGI application” vagy az „Apache module”. Ugyanazokat az üzemmódokat jelentik, amelyeket ez az oldal ír le. Kétség esetén az alább látható ellenőrző fájl segít, amely a tényleges SAPI-nevet mutatja.

Milyen PHP-SAPI-k léteznek?

A PHP-kézikönyv a php_sapi_name() visszatérési értékei között többek közt ezeket említi: apache, apache2handler, cgi (a PHP 5.3-ig), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed és phpdbg. A lista kifejezetten nem teljes.

SAPI-név Üzemmód Tipikus felhasználás Folyamatmodell
fpm-fcgi PHP-FPM Nginx, Apache proxy_fcgi-vel, tárhelyvezérlő panelek önálló szolgáltatás worker-poolokkal
apache2handler mod_php régebbi Apache-szerverek, egyszerű Docker-képek PHP az Apache-folyamatban
cgi-fcgi php-cgi régi telepítések, egyes Windows-beállítások folyamat kérésenként vagy FastCGI
litespeed LSAPI LiteSpeed webszerver, sok megosztott tárhely saját PHP-folyamatok
cli parancssor cron-feladatok, Composer, karbantartó szkriptek egy folyamat hívásonként
cli-server beépített webszerver csak helyi fejlesztés (php -S) egy fejlesztői szerver
embed beágyazott PHP más programokban a programtól függ
phpdbg hibakereső hibakeresés interaktív

A FrankenPHP egy modern alkalmazásszerver, amely közvetlenül beágyazza a PHP-t. Ezt is érinti a PHP2Shell, és saját frissítési útjai vannak; részletek a FrankenPHP védelme oldalon.

Így ellenőrizheti a szerver SAPI-ját

Egy weboldal SAPI-ját csak a webszerveren keresztül tudhatja meg, a parancssoron át nem. Egy kis ellenőrző fájl elég:

<?php
// sapi-check.php: a meghívás után azonnal törölje
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

A parancssorban a telepített változatok és szolgáltatások csak olvasva felmérhetők:

php -r 'echo PHP_SAPI, PHP_EOL;'          # mindig "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # telepített FPM-verziók
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # a mod_php be van töltve?

Miért lehet minden SAPI-nak saját php.ini-je

A PHP-kézikönyv szerint a PHP először egy php-SAPI.ini nevű fájlt keres, például php-cli.ini-t, és csak azután a php.ini-t. Az olyan disztribúciók, mint a Debian és az Ubuntu, ennél tovább mennek, és SAPI-nként külön könyvtárakat hoznak létre, például /etc/php/8.3/fpm/ és /etc/php/8.3/cli/.

Az időpont is eltér: szervermodulok esetén a PHP a kézikönyv szerint a konfigurációt csak a webszerver indításakor olvassa be egyszer, CGI és CLI esetén minden híváskor. Aki egy beállítást módosít, ezért tudnia kell, melyik SAPI-t érinti. Bővebben: A php.ini elmagyarázva.

SAPI és biztonság: amit a PHP2Shell megmutatott

A jelentések szerint a PHP2Shell a PHP-FPM-et, az Apache-ot mod_php-vel, a php-cgi-t, a FrankenPHP-t és a LiteSpeedet érinti. A PHP-csapat a kockázatot a mod_php esetén értékeli a legmagasabbra, mert ott még azelőtt bemutattak egy exploitot, hogy alkalmazáskód futna. Az okok a Miért a legmagasabb a mod_php kockázata oldalon olvashatók.

Az üzemeltetés szempontjából a SAPI elsősorban egyet jelent: meghatározza, mit kell a frissítés után újraindítani.

  1. PHP-FPM: minden telepített verzió összes poolja és workere
  2. mod_php: a teljes Apache-szolgáltatás, nem csak egy reload
  3. php-cgi és FastCGI-beállítások: az összes megmaradt PHP-folyamat
  4. LiteSpeed: a webszerver PHP-folyamatai a gyártó útmutatója szerint
  5. CLI: nincsenek tartós folyamatok, de a csomagot is frissíteni kell, hogy az ellenőrzések helyesek legyenek

Középtávon megéri a váltás a mod_php-ról. A PHP-kézikönyv új Apache-telepítésekhez a PHP-FPM-et ajánlja a mod_proxy_fcgi-vel. Az alapokat a PHP-FPM elmagyarázva oldal írja le.

Hogyan segít konkrétan a PHP SOS?

  • SAPI-k felmérése: Minden szerverre megállapítjuk, mely üzemmódok és PHP-verziók aktívak ténylegesen.
  • Helyes újraindítás: A PHP-javítási szolgáltatáson keresztül minden SAPI-t frissítünk, és igazoljuk az összes folyamat újraindítását.
  • Konfiguráció hozzárendelése: Megmutatjuk, mely php.ini és mely poolbeállítások érvényesek az Ön weboldalára.
  • Átállás tervezése: Ahol mod_php vagy php-cgi fut, megtervezzük és teszteljük a váltást PHP-FPM-re.

Gyakori kérdések

Hogyan tudom meg, melyik SAPI-t használja a weboldalam?

A legmegbízhatóbban egy rövid időre elhelyezett ellenőrző fájllal, amely kiírja a PHP_SAPI vagy a php_sapi_name() értékét, és a webszerveren keresztül hívják meg. A parancssorban mindig cli-t kap, ami a weboldalról semmit sem mond. Utána az ellenőrző fájlt azonnal törölje.

Melyik SAPI a legbiztonságosabb?

Egyik sem biztonságos önmagában. A PHP-FPM kínálja viszont a legtöbb elkülönítési eszközt: külön poolokat, felhasználókat és weboldalanként zárolt beállításokat. A PHP-kézikönyv új Apache-telepítésekhez kifejezetten a mod_php helyett a PHP-FPM-et ajánlja.

Érinti a PHP2Shell a PHP parancssori változatát?

Az ismert jelentések a PHP-FPM-et, a mod_php-t, a php-cgi-t, a FrankenPHP-t és a LiteSpeedet említik. A CLI nem dolgoz fel a hálózatról érkező kéréseket. Többnyire azonban ugyanabból a csomagforrásból származik, és mindig frissíteni kell, már csak azért is, hogy az ellenőrző parancsok a helyes állapotot mutassák.

Használhat egy szerver egyszerre több SAPI-t?

Igen, ez még szokásos is. Szinte minden szerveren a webes SAPI mellett ott van a CLI a cron-feladatokhoz és a karbantartáshoz. Gyakran több PHP-FPM-verzió is fut párhuzamosan. Mindegyiket külön kell frissíteni és újraindítani.

Források

Azonnali kapcsolat

Minden óra számít. Írjon nekünk most.

Ismertesse röviden a rendszert, a PHP-verziót és a megfigyelését. Jelentkezünk, tisztázzuk a helyzetet, és távolról dolgozunk, amíg az incidens le nem zárul és dokumentálva nem lesz.

Azonnali segítség