Stručne: Vo Windows aktualizujete PHP ručne: stiahnite opravenú verziu z php.net, zvoľte ten istý variant (Thread Safe alebo Non Thread Safe) a architektúru, skontrolujte stiahnutie podľa SHA-256, preberte php.ini a rozšírenia, prepnite cestu a reštartujte všetky procesy PHP. Obzvlášť naliehavá je aktualizácia, ak Apache vo Windows načíta PHP ako modul, pretože tento spôsob prevádzky tím PHP pri PHP2Shell hodnotí najvyššie.
Kde všade sa PHP na počítačoch s Windowsom skrýva
Servery s Windowsom a PHP existujú častejšie, než si mnohí myslia. Zriedka je to veľký web, často sú to intranety, odborné aplikácie alebo nástroje, ktoré niekto zriadil pred rokmi. Prevádzka pod IIS je podrobne opísaná na stránke Zabezpečenie PHP vo Windows a IIS. Tento článok sa venuje samotnej aktualizácii a prípadom mimo IIS.
Typické miesta nálezu sú Apache pre Windows s PHP ako modulom, vývojárske balíky ako XAMPP, WampServer alebo Laragon, ktoré skončili na serveri, vlastné kópie PHP v odborných aplikáciách a skripty PHP v plánovaných úlohách. Nasledujúce príkazy PowerShell len čítajú a pomáhajú pri hľadaní:
# Nájsť všetky php.exe na disku C: (na veľkých diskoch to chvíľu trvá)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Ktorý php.exe je vo vyhľadávacej ceste?
where.exe php
# Bežiace procesy PHP a Apache s cestou a časom spustenia
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Verzia a načítaná konfigurácia jednej inštalácie (cesta ako príklad)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Dôležité: ak PHP beží ako modul Apache, neexistuje vlastný proces PHP. PHP je potom v procese httpd.exe. Kto hľadá len procesy php-cgi, tieto inštalácie prehliadne.
Ľahko sa zabúda aj na plánované úlohy, ktoré volajú skripty PHP, napríklad pre importy, správy alebo vyrovnanie dát. Často používajú vlastný, starší php.exe. Pre PHP2Shell sa považujú za menej ohrozené, pretože príkazový riadok podľa doterajších údajov php.net nepatrí medzi dotknuté spôsoby prevádzky; pri výmene však musia ukazovať na novú cestu, inak ostáva v používaní stará inštalácia a nikdy sa neodstráni.
# Plánované úlohy, ktoré volajú PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Osobitnou témou sú vývojárske počítače. XAMPP a podobné balíky spúšťajú Apache s PHP ako modulom a často sú dosiahnuteľné v celej firemnej sieti. Aj tam treba PHP aktualizovať a webový server by mal počúvať len na vlastnom počítači.
Thread Safe alebo Non Thread Safe: správny variant
php.net ponúka každú verziu pre Windows v niekoľkých variantoch. Pri výmene platí: ten istý variant a architektúra ako doteraz, inak sa webový server alebo rozšírenia nenačítajú.
| Znak | Možnosti | Kedy ktorá |
|---|---|---|
| Bezpečnosť vlákien | NTS (Non Thread Safe), TS (Thread Safe) | podľa php.net NTS pre FastCGI, napríklad IIS, a príkazový riadok; TS pre PHP ako modul v Apache |
| Architektúra | x64, x86 | php.net odporúča x64 |
| Kompilátor | VS16, VS17 | vyžaduje Visual C++ Redistributable pre Visual Studio 2015 až 2022 |
Pre PHP 8.5 uvádzal php.net pri otvorení 25. 10. 2026 verziu 8.5.12 z 21. 10. 2026, ako archív ZIP vo všetkých štyroch kombináciách. Ostatné podporované vetvy si vyberiete na tej istej stránke. Opravené sú 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Pre 8.1 a staršie už oficiálne aktualizácie neexistujú.
Aktualizácia PHP vo Windows: kontrola stiahnutia a čistá výmena
- Stiahnuť opravenú verziu: zo stránky na stiahnutie pre Windows na php.net, podľa variantu a architektúry.
- Porovnať kontrolný súčet: php.net uvádza ku každému archívu hodnotu SHA-256. Ak sa odlišuje, súbor nepoužívajte.
- Rozbaliť do nového priečinka: napríklad
C:\PHP\8.4.27, aby starý stav ostal ako cesta späť. - Prevziať konfiguráciu: skopírovať doterajší
php.inia porovnať s novýmphp.ini-production. - Skontrolovať rozšírenia: Dodatočné súbory DLL od tretích strán musia zodpovedať verzii, variantu a architektúre.
- Prepnúť cestu: v zázname FastCGI, v riadku
LoadModulev Apache alebo v premennej prostrediaPATH. - Reštartovať a skontrolovať: reštartovať službu webového servera a plánované úlohy, potom skontrolovať verziu a časy spustenia.
# Vypočítať SHA-256 stiahnutého súboru a porovnať s php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# Po prepnutí: načítané rozšírenia a verzia novej inštalácie
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Ak sa PHP po prepnutí nespustí alebo hlási chýbajúci súbor DLL, často chýba Visual C++ Redistributable v zodpovedajúcej architektúre alebo rozšírenie nesedí k novej verzii. Chyba sa ukáže najrýchlejšie, ak zavoláte php.exe -v priamo v príkazovom riadku ešte pred prepnutím webového servera. Čo jednotlivé záznamy v php.ini spôsobujú, vysvetľuje Súbor php.ini vysvetlený.
Apache vo Windows: berte prevádzku ako modul vážne
Mnohé staršie inštalácie Windows zapájajú PHP cez riadok LoadModule priamo do Apache. Technicky je to to isté ako mod_php v Linuxe. Tím PHP hodnotí riziko PHP2Shell práve tam najvyššie, pretože exploit bol predvedený ešte predtým, než sa vôbec spustí kód aplikácie. Súvislosti sú v časti Prečo je mod_php obzvlášť ohrozený.
Ktoré moduly Apache načíta, ukáže httpd.exe -M v priečinku bin inštalácie; príkaz len číta. Ak sa tam nachádza modul PHP, má aktualizácia prednosť. Strednodobo sa oplatí prejsť na PHP cez FastCGI so zostavením NTS, aby PHP bežalo vo vlastných procesoch. To si vyžaduje test, pretože sa menia konfigurácia a práva.
Výmena súborov zraniteľnosť ešte neuzatvára. Kým služba Apache, aplikačné pooly IIS alebo plánované úlohy bežia so starou verziou, zraniteľnosť ostáva otvorená. Po aktualizácii skontrolujte čas spustenia každého procesu.
Po aktualizácii: kontrola a stopy
Pri každej inštalácii si zaznamenajte cestu, verziu, variant a dátum prepnutia. Staré priečinky PHP odstráňte až vtedy, keď nový stav beží stabilne, a potom naozaj, aby sa omylom nezapojili znovu.
Aktualizácia neodstráni škodlivý softvér. Ak bol server s Windowsom v dňoch pred záplatou dosiahnuteľný z internetu, skontrolujte webové adresáre na nové súbory skriptov, plánované úlohy a lokálne účty na neznáme položky a zabezpečte protokoly webového servera od 20. októbra. Ako spoznáte vlámanie, opisuje Som už kompromitovaný?.
Ako konkrétne pomáha PHP SOS?
- Nájsť všetky inštalácie: Hľadáme PHP na vašich systémoch s Windowsom, aj v moduloch Apache, vývojárskych balíkoch a odborných aplikáciách.
- Vymeniť a doložiť: Prostredníctvom služby záplatovania PHP prechádzame na opravenú verziu, kontrolujeme kontrolné súčty a dokumentujeme verziu a spustenie procesov.
- Zlepšiť spôsob prevádzky: Tam, kde PHP beží ako modul Apache, naplánujeme a otestujeme prechod na FastCGI.
- Skontrolovať stopy: Zabezpečíme protokoly a preveríme systémy na náznaky útoku.
Časté otázky
Aktualizuje Windows Update aj PHP?
Nie. PHP nie je súčasťou Windowsu. Prichádza ako archív ZIP z php.net, ako súčasť balíka ako XAMPP alebo s odbornou aplikáciou a musí sa aktualizovať vždy touto cestou.
Potrebujem verziu Thread Safe alebo Non Thread Safe?
Podľa php.net je NTS určená pre FastCGI, teda napríklad pre IIS, a pre príkazový riadok. TS je určená pre prevádzku ako modul vo webovom serveri, napríklad v Apache. Pri aktualizácii vezmite ten istý variant ako doteraz.
Ako overím, že je stiahnuté PHP pravé?
php.net uvádza ku každému archívu pre Windows kontrolný súčet SHA-256. Pomocou Get-FileHash v PowerShelli vypočítate kontrolný súčet stiahnutého súboru a obe hodnoty porovnáte znak po znaku.
Používam XAMPP na serveri. Čo teraz?
Balíky ako XAMPP prinášajú vlastné PHP a Apache, často s PHP ako modulom Apache. Skontrolujte, či projekt ponúka verziu s opraveným PHP, inak inštaláciu prepnite na udržiavané riešenie. Pre produkčnú prevádzku takéto vývojárske balíky aj tak nie sú určené.