Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

SAPI izskaidrota: kā PHP sazinās ar tīmekļa serveri

SAPI ir saskarne starp PHP un tīmekļa serveri. Tā nosaka, kā pieprasījumi nonāk, kurš php.ini ir spēkā un kas pēc atjauninājuma jāpārstartē.

Aktuāls uz 4 min lasīšanas laiksPHP zināšanas

Īsi: SAPI nozīmē Server Application Programming Interface, saskarni, caur kuru PHP sazinās ar savu vidi. Tipiskas SAPI ir fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed un cli komandrindai. SAPI nosaka, kā pieprasījumi nonāk, kurš php.ini ir spēkā un kuri procesi pēc atjauninājuma jāpārstartē. PHP2Shell gadījumā no tās atkarīgs pat riska novērtējums.

Kas ir SAPI?

PHP pats par sevi ir programma, kas izpilda kodu. Lai tā varētu piegādāt tīmekļa lapas, tai vajadzīgs savienojums ar tīmekļa serveri, komandrindu vai citu lietojumprogrammu. Šis savienojums ir SAPI. Tā pieņem pieprasījuma datus, nodod tos Zend Engine un atdod izvadi.

SAPI var iedomāties kā spraudni: dzinējs paliek tas pats, bet atkarībā no spraudņa tas der Apache, Nginx caur FastCGI, LiteSpeed vai terminālim. Katram variantam ir savas stiprās puses, savi konfigurēšanas ceļi un savi pārpratumu cēloņi.

SAPI galvenokārt izšķir trīs lietas, kas ikdienā ir svarīgas:

  1. Procesu modelis: Vai PHP darbojas tīmekļa serverī, kā atsevišķs pakalpojums ar pastāvīgiem darbprocesiem vai kā īslaicīgs process katram izsaukumam?
  2. Konfigurācija: Kurš php.ini tiek nolasīts un kur drīkst atrasties papildu iestatījumi, piemēram, .htaccess, .user.ini vai FPM pūlā?
  3. Tiesības un nošķiršana: Ar kuru lietotāju darbojas kods un vai vairākas vietnes var nošķirt cita no citas?

Hostinga paneļos SAPI parādās ar citiem nosaukumiem. Plesk, piemēram, runā par PHP apstrādātājiem (handler), proti, „FPM application“, „FastCGI application“ vai „Apache module“. Domāti tie paši darbības režīmi, ko apraksta šī lapa. Šaubu gadījumā palīdz tālāk aprakstītais pārbaudes fails, kas parāda faktisko SAPI nosaukumu.

Kādas PHP SAPI pastāv?

PHP rokasgrāmata php_sapi_name() min, cita starpā, šādas atgriežamās vērtības: apache, apache2handler, cgi (līdz PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed un phpdbg. Saraksts skaidri nav izsmeļošs.

SAPI nosaukums Darbības režīms Tipisks pielietojums Procesu modelis
fpm-fcgi PHP-FPM Nginx, Apache ar proxy_fcgi, hostinga paneļi atsevišķs pakalpojums ar darbprocesu pūliem
apache2handler mod_php vecāki Apache serveri, vienkārši Docker attēli PHP Apache procesā
cgi-fcgi php-cgi vecas instalācijas, daži Windows risinājumi process katram pieprasījumam vai FastCGI
litespeed LSAPI LiteSpeed tīmekļa serveris, daudzi koplietošanas hostinga sniedzēji savi PHP procesi
cli komandrinda cron uzdevumi, Composer, apkopes skripti viens process katram izsaukumam
cli-server iebūvētais tīmekļa serveris tikai lokālai izstrādei (php -S) izstrādes serveris
embed iegultais PHP citās programmās atkarīgs no programmas
phpdbg atkļūdotājs kļūdu meklēšana interaktīvs

FrankenPHP ir moderns lietojumprogrammu serveris, kas PHP iegulst tieši. Arī to PHP2Shell skar, un tam ir savi atjaunināšanas ceļi; detaļas skatiet sadaļā FrankenPHP aizsardzība.

Kā pārbaudīt sava servera SAPI

Vietnes SAPI uzzināsiet tikai caur tīmekļa serveri, nevis caur komandrindu. Pietiek ar nelielu pārbaudes failu:

<?php
// sapi-check.php: pēc izsaukuma nekavējoties izdzēst
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

Komandrindā instalētos variantus un pakalpojumus var uzskaitīt tikai lasot:

php -r 'echo PHP_SAPI, PHP_EOL;'          # vienmēr "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # instalētās FPM versijas
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # vai mod_php ir ielādēts?

Kāpēc katrai SAPI var būt savs php.ini

Saskaņā ar PHP rokasgrāmatu PHP vispirms meklē failu php-SAPI.ini, tātad, piemēram, php-cli.ini, un tikai pēc tam php.ini. Distributīvi, piemēram, Debian un Ubuntu, iet tālāk un katrai SAPI izveido savas mapes, piemēram, /etc/php/8.3/fpm/ un /etc/php/8.3/cli/.

Atšķiras arī laiks: servera moduļu gadījumā PHP saskaņā ar rokasgrāmatu konfigurāciju nolasa tikai vienreiz, startējot tīmekļa serveri, CGI un CLI gadījumā katrā izsaukumā. Kas maina iestatījumu, tāpēc jāzina, kura SAPI tiek skarta. Vairāk sadaļā php.ini izskaidrots.

SAPI un drošība: ko parādīja PHP2Shell

Saskaņā ar ziņojumiem PHP2Shell skar PHP-FPM, Apache ar mod_php, php-cgi, FrankenPHP un LiteSpeed. PHP komanda risku mod_php gadījumā vērtē visaugstāk, jo tur exploit tika demonstrēts, vēl pirms tiek izpildīts lietojumprogrammas kods. Iemesli aprakstīti sadaļā Kāpēc mod_php rada augstāko risku.

Darbībai SAPI nozīmē galvenokārt vienu: tā nosaka, kas pēc atjauninājuma jāpārstartē.

  1. PHP-FPM: visi katras instalētās versijas pūli un darbprocesi
  2. mod_php: viss Apache pakalpojums, ne tikai pārlāde (reload)
  3. php-cgi un FastCGI risinājumi: visi atlikušie PHP procesi
  4. LiteSpeed: tīmekļa servera PHP procesi saskaņā ar sniedzēja norādījumiem
  5. CLI: nav pastāvīgu procesu, bet pakotne jāatjaunina līdzi, lai pārbaudes būtu pareizas

Vidējā termiņā ir vērts pāriet no mod_php. PHP rokasgrāmata jaunām Apache instalācijām iesaka PHP-FPM ar mod_proxy_fcgi. Pamatus apraksta PHP-FPM izskaidrots.

Kā PHP SOS palīdz konkrēti?

  • Apzināt SAPI: Mēs katram serverim noskaidrojam, kuri darbības režīmi un PHP versijas patiešām ir aktīvas.
  • Pārstartēt pareizi: Ar PHP ielāpošanas pakalpojumu mēs atjauninām katru SAPI un pierādām visu procesu pārstartēšanu.
  • Piesaistīt konfigurāciju: Mēs parādām, kurš php.ini un kuri pūla iestatījumi ir spēkā jūsu vietnei.
  • Plānot pāreju: Kur darbojas mod_php vai php-cgi, mēs plānojam un testējam pāreju uz PHP-FPM.

Biežāk uzdotie jautājumi

Kā noskaidrot, kuru SAPI izmanto mana vietne?

Visdrošāk ar uz īsu brīdi novietotu pārbaudes failu, kas izvada PHP_SAPI vai php_sapi_name() un ko izsauc caur tīmekļa serveri. Komandrindā vienmēr iegūsiet cli, un tas par vietni neko nesaka. Pēc tam pārbaudes failu nekavējoties izdzēsiet.

Kura SAPI ir drošākā?

Neviena pati par sevi nav droša. Taču PHP-FPM piedāvā visvairāk nošķiršanas rīku: atsevišķus pūlus, lietotājus un bloķētus iestatījumus katrai vietnei. PHP rokasgrāmata jaunām Apache instalācijām skaidri iesaka PHP-FPM, nevis mod_php.

Vai PHP2Shell skar komandrindas versiju?

Zināmajos ziņojumos minēti PHP-FPM, mod_php, php-cgi, FrankenPHP un LiteSpeed. CLI neapstrādā pieprasījumus no tīkla. Taču tā parasti nāk no tā paša pakotņu avota, un to vienmēr vajadzētu atjaunināt līdzi, jau tāpēc, lai pārbaudes komandas rādītu pareizo stāvokli.

Vai serveris var izmantot vairākas SAPI vienlaikus?

Jā, tas pat ir ierasti. Gandrīz katram serverim līdzās tīmekļa SAPI ir CLI cron uzdevumiem un apkopei. Bieži vienlaikus darbojas arī vairākas PHP-FPM versijas. Katra no tām jāatjaunina un jāpārstartē atsevišķi.

Avoti

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība