Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

PHP atnaujinimas Windows sistemoje

Windows sistemoje automatinio PHP atnaujinimo nėra. Kas pasirenka tinkamą variantą, patikrina atsisiuntimą ir paleidžia visus procesus iš naujo, PHP2Shell pataisą tvarkingai įdiegia kiekviename kompiuteryje.

Būsena 5 min. skaitymoHostingas ir distribucijos

Trumpai: Windows sistemoje PHP atnaujinate rankiniu būdu: iš php.net atsisiųsti ištaisytą versiją, pasirinkti tą patį variantą (Thread Safe ar Non Thread Safe) ir architektūrą, patikrinti atsisiuntimą per SHA-256, perkelti php.ini ir plėtinius, pakeisti kelią ir paleisti iš naujo visus PHP procesus. Atnaujinimas ypač skubus, jei Apache Windows sistemoje PHP įkelia kaip modulį, nes šį veikimo režimą PHP komanda esant PHP2Shell vertina didžiausiu rizikos lygiu.

Kur visur Windows kompiuteriuose slypi PHP

Windows serverių su PHP yra dažniau, nei daugelis mano. Retai tai didelė svetainė, dažnai tai intranetai, specializuotos programos ar įrankiai, kuriuos prieš metus kažkas įrengė. Eksploatavimas su IIS išsamiai aprašytas puslapyje PHP Windows ir IIS apsauga. Šis straipsnis nagrinėja patį atnaujinimą ir atvejus už IIS ribų.

Tipinės radimo vietos: Apache Windows sistemai su PHP kaip moduliu, kūrėjų paketai, tokie kaip XAMPP, WampServer ar Laragon, kurie atsidūrė serveryje, savos PHP kopijos specializuotose programose ir PHP skriptai suplanuotose užduotyse. Toliau pateiktos PowerShell komandos tik skaito ir padeda surasti:

# Rasti visus php.exe diske C: (dideliuose diskuose užtrunka)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Kuris php.exe yra paieškos kelyje?
where.exe php

# Veikiantys PHP ir Apache procesai su keliu ir paleidimo laiku
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Diegimo versija ir įkelta konfigūracija (kelias kaip pavyzdys)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini

Svarbu: jei PHP veikia kaip Apache modulis, atskiro PHP proceso nėra. PHP tuomet slypi procese httpd.exe. Kas ieško tik php-cgi procesų, šiuos diegimus praleidžia.

Lengvai pamirštamos ir suplanuotos užduotys, kurios kviečia PHP skriptus, pavyzdžiui, importui, ataskaitoms ar duomenų suderinimui. Jos dažnai naudoja savo, senesnį php.exe. PHP2Shell atžvilgiu jos laikomos mažiau pavojingomis, nes komandinė eilutė pagal dabartinius php.net duomenis nepriklauso paveiktiems veikimo režimams; keičiant jos vis tiek turi rodyti į naują kelią, kitaip sena versija lieka naudojama ir niekada nepašalinama.

# Suplanuotos užduotys, kurios kviečia PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}

Atskira tema yra kūrėjų kompiuteriai. XAMPP ir panašūs paketai paleidžia Apache su PHP kaip moduliu ir dažnai yra pasiekiami visame įmonės tinkle. Ir ten PHP reikia atnaujinti, o žiniatinklio serveris turėtų klausytis tik savo kompiuteryje.

Thread Safe ar Non Thread Safe: tinkamas variantas

php.net kiekvieną Windows versiją siūlo keliais variantais. Keičiant galioja: tas pats variantas ir architektūra kaip iki šiol, kitaip žiniatinklio serveris ar plėtiniai neįsikels.

Požymis Parinktys Kada kuri
Gijų saugumas NTS (Non Thread Safe), TS (Thread Safe) pagal php.net NTS FastCGI, pavyzdžiui, IIS, ir komandinei eilutei; TS PHP kaip moduliui Apache
Architektūra x64, x86 php.net rekomenduoja x64
Kompiliatorius VS16, VS17 reikia Visual C++ Redistributable, skirto Visual Studio 2015–2022

PHP 8.5 php.net peržiūrint 2026-10-25 nurodė 8.5.12 versiją nuo 2026-10-21, kaip ZIP archyvą visais keturiais deriniais. Likusias palaikomas šakas pasirenkate tame pačiame puslapyje. Ištaisytos 8.5.12, 8.4.27, 8.3.36 ir 8.2.35. 8.1 ir senesnėms oficialių atnaujinimų nebėra.

PHP atnaujinimas Windows: atsisiuntimo patikra ir tvarkingas pakeitimas

  1. Atsisiųsti ištaisytą versiją: iš Windows atsisiuntimų puslapio php.net, atitinkančią variantą ir architektūrą.
  2. Palyginti kontrolinę sumą: php.net prie kiekvieno archyvo nurodo SHA-256 reikšmę. Jei ji skiriasi, failo nenaudokite.
  3. Išpakuoti į naują aplanką: pavyzdžiui, C:\PHP\8.4.27, kad sena būsena liktų kaip kelias atgal.
  4. Perkelti konfigūraciją: nukopijuoti ankstesnį php.ini ir palyginti su nauju php.ini-production.
  5. Patikrinti plėtinius: papildomi trečiųjų šalių DLL failai turi atitikti versiją, variantą ir architektūrą.
  6. Pakeisti kelią: FastCGI įraše, Apache eilutėje LoadModule arba aplinkos kintamajame PATH.
  7. Paleisti iš naujo ir patikrinti: iš naujo paleisti žiniatinklio serverio tarnybą ir suplanuotas užduotis, tada patikrinti versiją ir paleidimo laikus.
# Apskaičiuoti atsisiųsto failo SHA-256 ir palyginti su php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Po perjungimo: įkelti plėtiniai ir naujo diegimo versija
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v

Jei PHP po perjungimo nepasileidžia arba praneša apie trūkstamą DLL, dažnai trūksta Visual C++ Redistributable tinkamai architektūrai arba plėtinys neatitinka naujos versijos. Klaida greičiausiai išryškėja, kai php.exe -v iškviečiate tiesiai komandinėje eilutėje prieš perjungdami žiniatinklio serverį. Ką daro atskiri php.ini įrašai, paaiškina php.ini paaiškinimas.

Apache Windows sistemoje: modulio režimą vertinti rimtai

Daug senesnių Windows diegimų PHP įtraukia eilute LoadModule tiesiai į Apache. Techniškai tai tas pats, kas mod_php Linux sistemoje. PHP komanda PHP2Shell riziką būtent ten vertina didžiausia, nes išnaudojimas buvo parodytas dar prieš pradedant vykdyti programos kodą. Pagrindai pateikti skiltyje Kodėl mod_php ypač pažeidžiamas.

Kokius modulius Apache įkelia, parodo httpd.exe -M diegimo bin aplanke; komanda tik skaito. Jei ten yra PHP modulis, atnaujinimas turi pirmenybę. Vidutiniu laikotarpiu verta pereiti prie PHP per FastCGI su NTS kūriniu, kad PHP veiktų savo procesuose. Tam reikia testo, nes keičiasi konfigūracija ir teisės.

Svarbu

Failų pakeitimas spragos dar neuždaro. Kol Apache tarnyba, IIS programų baseinai ar suplanuotos užduotys veikia su sena versija, spraga lieka atvira. Po atnaujinimo patikrinkite kiekvieno proceso paleidimo laiką.

Po atnaujinimo: kontrolė ir pėdsakai

Kiekvienam diegimui užfiksuokite kelią, versiją, variantą ir pakeitimo datą. Senus PHP aplankus šalinkite tik tada, kai naujoji būsena veikia stabiliai, ir tada tikrai, kad jie netyčia vėl nebūtų įtraukti.

Atnaujinimas nepašalina kenkėjiškos programinės įrangos. Jei Windows serveris dienomis iki pataisos buvo pasiekiamas iš interneto, patikrinkite žiniatinklio katalogus dėl naujų skriptų failų, suplanuotas užduotis ir vietines paskyras dėl nežinomų bei išsaugokite žiniatinklio serverio protokolus nuo spalio 20 d. Kaip atpažinti įsilaužimą, aprašo Ar jau esu pažeistas?.

Kaip PHP SOS padeda konkrečiai?

  • Rasti visus diegimus: ieškome PHP jūsų Windows sistemose, taip pat Apache moduliuose, kūrėjų paketuose ir specializuotose programose.
  • Pakeisti ir įrodyti: per PHP pataisų paslaugą pereiname prie ištaisytos versijos, tikriname kontrolines sumas ir dokumentuojame versiją bei proceso paleidimą.
  • Pagerinti veikimo režimą: kur PHP veikia kaip Apache modulis, planuojame ir išbandome perėjimą prie FastCGI.
  • Patikrinti pėdsakus: išsaugome protokolus ir tikriname sistemas dėl atakos požymių.

Dažni klausimai

Ar Windows Update atnaujina ir PHP?

Ne. PHP nėra Windows dalis. Jis ateina kaip ZIP archyvas iš php.net, kaip paketo, pavyzdžiui, XAMPP, dalis arba kartu su specializuota programa, ir kiekvienu atveju turi būti atnaujinamas tuo pačiu keliu.

Ar man reikia Thread Safe ar Non Thread Safe versijos?

Pagal php.net, NTS skirta FastCGI, taigi, pavyzdžiui, IIS, ir komandinei eilutei. TS skirta veikti kaip žiniatinklio serverio modulis, pavyzdžiui, Apache. Atnaujindami rinkitės tą patį variantą kaip iki šiol.

Kaip patikrinti, ar PHP atsisiuntimas tikras?

php.net prie kiekvieno Windows archyvo nurodo SHA-256 kontrolinę sumą. Su Get-FileHash PowerShell apskaičiuokite atsisiųsto failo kontrolinę sumą ir palyginkite abi reikšmes simbolis po simbolio.

Serveryje naudoju XAMPP. Ką daryti dabar?

Paketai, tokie kaip XAMPP, atsineša savo PHP ir Apache, dažnai su PHP kaip Apache moduliu. Patikrinkite, ar projektas siūlo versiją su ištaisytu PHP, o jei ne, diegimą perjunkite į prižiūrimą sprendimą. Gamybai tokie kūrėjų paketai vis tiek neskirti.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba