Trumpai: Norint patikrinti PHP versiją, php -v nepakanka. Reikia žinoti, kurią PHP versiją žiniatinklio serveris iš tikrųjų naudoja, ar paketas turi taisymą, taip pat kaip atgalinį perkėlimą su sena versija, ir ar po atnaujinimo visi procesai paleisti iš naujo. PHP2Shell ištaisyta 8.5.12, 8.4.27, 8.3.36 ir 8.2.35 versijose.
Kodėl vien versijos numerio nepakanka
PHP2Shell turime aiškų ištaisytų versijų sąrašą. Praktikoje vis dėlto trys situacijos lemia klaidingus vertinimus:
- Kelios diegimo versijos: komandinė eilutė rodo PHP 8.3, bet svetainė veikia per baseiną su PHP 8.1.
- Atgaliniai perkėlimai: distribucijos ir talpintojai taisymus kartais įdiegia į esamus paketus. Tada, pavyzdžiui, Plesk toliau rodo 8.2.34, nors pataisyta.
- Seni procesai: nauji failai guli diske, bet veikiantys darbiniai procesai (worker) yra iš ankstesnio laiko.
Vadovybei ir ne technikams padeda paprasta taisyklė: klauskite ne tik „Kokią PHP versiją turime?“, bet „Ar PHP2Shell visuose serveriuose uždaryta ir iš ko tai matome?“. Patikimas atsakymas turi tris įrodymus: versiją ar atgalinį perkėlimą, paketų būseną ir paleidimo iš naujo laiką.
Techninė patikra todėl turi tris žingsnius: versija, paketų būsena, veikiantys procesai. Toliau pateiktos komandos tik skaito. Paketų ir tarnybų pavadinimai skiriasi pagal distribuciją, PHP šaltinį ir talpinimo sąsają; pavyzdžiai remiasi PHP 8.3.
PHP versijos tikrinimas komandinėje eilutėje
php -v # komandinės eilutės versija
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: įdiegtos šakos
php-fpm8.3 -v # FPM vykdomojo failo versija (pavadinimas priklauso nuo distribucijos)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
RHEL, AlmaLinux ar Rocky sistemose FPM vykdomasis failas dažniausiai vadinasi php-fpm; su Software Collections ar trečiųjų šalių šaltiniais kitos versijos guli savo keliuose. Plesk ir cPanel turi savus PHP diegimus, egzistuojančius šalia sistemos PHP. Kaip ten elgtis, aprašome puslapiuose apie Plesk ir cPanel.
Kurią PHP versiją svetainė naudoja žiniatinklio kontekste, patikimiausia matyti baseino ar VirtualHost konfigūracijoje arba talpinimo sąsajoje. Tai parodo ir phpinfo puslapis; kurkite jį tik trumpam, su prieigos apsauga ir atsitiktiniu pavadinimu, ir iš karto po to ištrinkite.
Bendrame talpinime (shared hosting) komandinės eilutės prieigos dažniausiai nėra. Tada talpinimo sąsaja rodo nustatytą PHP versiją kiekvienai svetainei. Ar atgalinis perkėlimas įdiegtas ir paleistas iš naujo, ten retai nurodyta. Čia patikimas kelias yra raštiškas talpintojo patvirtinimas.
Paketų būsenos ir atgalinių perkėlimų tikrinimas
Paketų būsena rodo, ką jūsų distribucija iš tikrųjų pateikė:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Jei pakeitimų žurnale yra vienas iš CVE numerių, atgalinis perkėlimas įdiegtame pakete yra. Jei įrašo nėra, tai dar nėra spragos įrodymas: kai kurie paketų prižiūrėtojai pakeitimų žurnalus formuluoja kitaip. Tuomet palyginkite paketo versiją su savo distribucijos saugumo pranešimais arba paklauskite teikėjo. Šios užklausos pavyzdį rasite puslapyje Kaip paklausti talpintojo apie pataisų būseną.
Svarbu: tikrinkite kiekvieną įdiegtą PHP paketą, ne tik pirmąjį. Serveriuose su keliomis šakomis dažnai viena pataisyta, o kita ne.
Ar nauja versija tikrai veikia?
Atnaujinimas veikia tik paleidus iš naujo visus PHP procesus. Palyginkite veikiančių procesų paleidimo laiką su atnaujinimo laiku:
ps -o pid,lstart,cmd -C php-fpm8.3 # FPM procesų paleidimo laikas
systemctl status php8.3-fpm # nuo kada tarnyba veikia
needrestart -r l # Debian/Ubuntu, jei įdiegta: parodo pasenusius procesus
Jei paleidimo laikas ankstesnis už atnaujinimą, dar veikia seni procesai. Esant Apache su mod_php tas pats galioja Apache procesams. Kaip tvarkingai paleisti iš naujo, aprašo PHP-FPM ir visų darbinių procesų paleidimas iš naujo.
Rezultatą užfiksuokite raštu: serveris, PHP versija, paketo versija, CVE pakeitimų žurnale taip ar ne, paleidimo iš naujo laikas. Šios pastabos jums reikės vadovybei, draudikui ir vėlesnei pėdsakų patikrai.
Rezultato vertinimas
| Radinys | Vertinimas |
|---|---|
| Oficiali versija 8.5.12, 8.4.27, 8.3.36 ar 8.2.35, procesai paleisti iš naujo | PHP2Shell uždaryta |
| Senesnis numeris, CVE numeriai paketo pakeitimų žurnale, procesai paleisti iš naujo | atgalinis perkėlimas įdiegtas, uždaryta |
| Senesnis numeris, įrašo pakeitimų žurnale nėra, patvirtinimo nėra | neaišku, išsiaiškinti pas teikėją |
| PHP 8.1 ar senesnė be patvirtinto atgalinio perkėlimo | atvira, reikia pereinamųjų priemonių ir migracijos |
| Procesai senesni už atnaujinimą | trūksta paleidimo iš naujo, spraga vis dar aktyvi |
Jei serveris lieka „neaiškus“, traktuokite jį kaip atvirą: nustatykite pereinamąsias priemones ir sekite išsiaiškinimą, kol bus įrodymas. Visą versijų apžvalgą rasite puslapyje Kurios PHP versijos paveiktos?.
Kaip PHP SOS padeda konkrečiai?
Per PHP pataisų paslaugą perimame patikrą ir įrodymą:
- Rasti visus diegimus, taip pat antrines versijas iš talpinimo skydelių, Software Collections ar konteinerių.
- Įvertinti paketų būseną: oficialus leidimas, atgalinis perkėlimas ar atvira, su įrodymu iš pakeitimų žurnalo ar nuo teikėjo.
- Kontroliuoti paleidimą iš naujo, kol nebeveikia joks procesas su senu kodu.
- Parengti patikros protokolą, kurį galite naudoti viduje ir trečiosioms šalims.
Dažni klausimai
Kodėl php -v rodo kitą versiją nei mano svetainė?
Daugelyje serverių įdiegtos kelios PHP versijos. Komandinė eilutė naudoja vieną iš jų, žiniatinklio serveris ar FPM baseinas kitą. Todėl patikrinkite versiją, kuri iš tikrųjų veikia žiniatinklio kontekste, pavyzdžiui, per FPM vykdomąjį failą ar talpinimo sąsają.
Kaip atpažinti atgalinį perkėlimą (backport)?
Distribucijų paketuose taisymas dažnai nurodytas paketo pakeitimų žurnale (changelog), neretai su CVE numeriu. Debian ir Ubuntu padeda apt changelog, RHEL tipo sistemose rpm -q --changelog. Jei įrašo nėra, būklę išsiaiškinkite pas teikėją.
Ar PHP versiją galiu patikrinti talpinimo klientų meniu?
Taip, dauguma sąsajų rodo nustatytą versiją kiekvienai svetainei. Ar atgalinis perkėlimas įdiegtas ir paleistas iš naujo, ten dažniausiai nematyti. Tam patikimiausias kelias yra raštiškas talpintojo patvirtinimas.