Stručně: Ve Windows aktualizujete PHP ručně: stáhnout opravenou verzi z php.net, zvolit stejnou variantu (Thread Safe nebo Non Thread Safe) a architekturu, ověřit stažení pomocí SHA-256, převzít php.ini a rozšíření, přepnout cestu a restartovat všechny procesy PHP. Zvlášť naléhavá je aktualizace, když Apache ve Windows načítá PHP jako modul, protože tento provozní režim tým PHP u PHP2Shell hodnotí nejvýše.
Kde všude PHP na počítačích s Windows sídlí
Servery s Windows a PHP existují častěji, než si mnozí myslí. Zřídkakdy jde o velký web, často jde o intranety, odborné aplikace nebo nástroje, které před lety někdo zřídil. Provoz pod IIS je podrobně popsán na stránce Zabezpečení PHP ve Windows a IIS. Tento článek se zabývá samotnou aktualizací a případy mimo IIS.
Typickými místy nálezu jsou Apache pro Windows s PHP jako modulem, vývojářské balíky jako XAMPP, WampServer nebo Laragon, které skončily na serveru, vlastní kopie PHP v odborných aplikacích a skripty PHP v plánovaných úlohách. Následující příkazy PowerShellu jen čtou a pomáhají při hledání:
# Najít všechny php.exe na jednotce C: (na velkých discích to chvíli trvá)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Která php.exe leží v cestě vyhledávání?
where.exe php
# Běžící procesy PHP a Apache s cestou a časem spuštění
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Verze a načtená konfigurace jedné instalace (cesta jako příklad)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Důležité: Běží-li PHP jako modul Apache, neexistuje samostatný proces PHP. PHP pak sídlí v procesu httpd.exe. Kdo hledá jen procesy php-cgi, tyto instalace přehlédne.
Snadno se zapomíná i na plánované úlohy, které volají skripty PHP, například pro importy, reporty nebo srovnání dat. Často používají vlastní, starší php.exe. Pro PHP2Shell se považují za méně ohrožené, protože příkazová řádka podle dosavadních údajů php.net nepatří k postiženým provozním režimům; při výměně však musí ukazovat na novou cestu, jinak zůstane stará instalace v používání a nikdy se neodstraní.
# Plánované úlohy, které volají PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Samostatným tématem jsou vývojářské počítače. XAMPP a podobné balíky spouštějí Apache s PHP jako modulem a často jsou dostupné v celé firemní síti. I tam je třeba PHP aktualizovat a webový server by měl naslouchat jen na vlastním počítači.
Thread Safe, nebo Non Thread Safe: správná varianta
php.net nabízí každou verzi pro Windows v několika variantách. Pro výměnu platí: stejná varianta a architektura jako dosud, jinak se webový server nebo rozšíření nenačtou.
| Znak | Možnosti | Kdy která |
|---|---|---|
| Thread safety | NTS (Non Thread Safe), TS (Thread Safe) | podle php.net NTS pro FastCGI, např. IIS, a příkazovou řádku; TS pro PHP jako modul v Apache |
| Architektura | x64, x86 | php.net doporučuje x64 |
| Kompilátor | VS16, VS17 | vyžaduje Visual C++ Redistributable pro Visual Studio 2015 až 2022 |
Pro PHP 8.5 uváděl php.net při dotazu 25. 10. 2026 verzi 8.5.12 z 21. 10. 2026 jako archiv ZIP ve všech čtyřech kombinacích. Ostatní podporované větve zvolíte na téže stránce. Opraveny jsou 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Pro 8.1 a starší už oficiální aktualizace neexistují.
Aktualizace PHP ve Windows: ověřit stažení a čistě vyměnit
- Stáhnout opravenou verzi: ze stránky ke stažení pro Windows na php.net, podle varianty a architektury.
- Porovnat kontrolní součet: php.net uvádí ke každému archivu hodnotu SHA-256. Liší-li se, soubor nepoužívejte.
- Rozbalit do nové složky: například
C:\PHP\8.4.27, aby zůstal starý stav pro cestu zpět. - Převzít konfiguraci: zkopírovat dosavadní
php.inia porovnat s novýmphp.ini-production. - Zkontrolovat rozšíření: Dodatečné soubory DLL od třetích stran musí odpovídat verzi, variantě a architektuře.
- Přepnout cestu: v položce FastCGI, v řádku
LoadModuleApache nebo v proměnné prostředíPATH. - Restartovat a ověřit: restartovat službu webového serveru a plánované úlohy, poté zkontrolovat verzi a časy spuštění.
# Vypočítat SHA-256 staženého souboru a porovnat s php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# Po přepnutí: načtená rozšíření a verze nové instalace
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Pokud se PHP po přepnutí nespustí nebo hlásí chybějící DLL, chybí často Visual C++ Redistributable ve správné architektuře, nebo rozšíření neodpovídá nové verzi. Chyba se projeví nejrychleji, když zavoláte php.exe -v přímo v příkazové řádce dřív, než přepnete webový server. Co znamenají jednotlivé položky php.ini, vysvětluje php.ini vysvětleno.
Apache ve Windows: vzít provoz modulu vážně
Mnoho starších instalací ve Windows zapojuje PHP přes řádek LoadModule přímo do Apache. Technicky je to totéž co mod_php v Linuxu. Tým PHP hodnotí riziko PHP2Shell právě tam nejvýše, protože exploit byl předveden ještě předtím, než se vůbec spustí kód aplikace. Souvislosti najdete v článku Proč je mod_php zvlášť ohrožen.
Které moduly Apache načítá, ukáže httpd.exe -M ve složce bin instalace; příkaz jen čte. Pokud tam stojí modul PHP, má aktualizace přednost. Z dlouhodobého hlediska se vyplatí přechod na PHP přes FastCGI s buildem NTS, aby PHP běželo ve vlastních procesech. To vyžaduje test, protože se mění konfigurace a oprávnění.
Výměna souborů zranitelnost ještě neuzavírá. Dokud služba Apache, aplikační fondy IIS nebo plánované úlohy běží se starou verzí, zůstává zranitelnost otevřená. Po aktualizaci zkontrolujte čas spuštění každého procesu.
Po aktualizaci: kontrola a stopy
U každé instalace si poznamenejte cestu, verzi, variantu a datum přechodu. Staré složky PHP odstraňte, až nový stav stabilně běží, a pak skutečně, aby nemohly být omylem znovu zapojeny.
Aktualizace neodstraní škodlivý software. Byl-li server s Windows ve dnech před záplatou dostupný z internetu, zkontrolujte webové adresáře na nové soubory skriptů, plánované úlohy a lokální účty na neznámé položky a zajistěte protokoly webového serveru od 20. října. Podle čeho poznáte průnik, popisuje článek Jsem už kompromitován?.
Jak konkrétně pomáhá PHP SOS?
- Najít všechny instalace: Hledáme PHP na vašich systémech Windows, i v modulech Apache, vývojářských balíčcích a odborných aplikacích.
- Vyměnit a doložit: Prostřednictvím PHP Patch Service přecházíme na opravenou verzi, ověřujeme kontrolní součty a dokumentujeme verzi a spuštění procesů.
- Zlepšit provozní režim: Kde PHP běží jako modul Apache, plánujeme a testujeme přechod na FastCGI.
- Zkontrolovat stopy: Zajišťujeme protokoly a kontrolujeme systémy na známky útoku.
Časté dotazy
Aktualizuje Windows Update i PHP?
Ne. PHP není součástí Windows. Přichází jako archiv ZIP z php.net, jako součást balíku jako XAMPP nebo s odbornou aplikací a musí se aktualizovat vždy touto cestou.
Potřebuji verzi Thread Safe, nebo Non Thread Safe?
Podle php.net je NTS určeno pro FastCGI, tedy například pro IIS, a pro příkazovou řádku. TS je určeno pro provoz jako modul ve webovém serveru, například v Apache. Při aktualizaci zvolte stejnou variantu jako dosud.
Jak ověřím, že je stažené PHP pravé?
php.net uvádí ke každému archivu pro Windows kontrolní součet SHA-256. Pomocí Get-FileHash v PowerShellu vypočtete kontrolní součet staženého souboru a obě hodnoty porovnáte znak po znaku.
Používám XAMPP na serveru. Co teď?
Balíky jako XAMPP přinášejí vlastní PHP a Apache, často s PHP jako modulem Apache. Zkontrolujte, zda projekt nabízí verzi s opraveným PHP, jinak instalaci přestavte na udržované řešení. Pro produkční provoz takové vývojářské balíky stejně nejsou určeny.