Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Zabezpečení PHP ve Windows a IIS

V IIS běží PHP většinou jako php-cgi.exe přes FastCGI. Takto najdete všechny instalace, bezpečně PHP vyměníte, recyklujete aplikační pooly a ověříte výsledek.

Stav 4 min čteníServer a hosting

Stručně: Ve Windows s IIS běží PHP většinou jako php-cgi.exe přes FastCGI, tedy v provozním režimu, kterého se PHP2Shell výslovně týká. Aktualizace PHP v IIS má tři kroky: najít všechny instalace PHP, nahradit je opravenou verzí a recyklovat aplikační pooly. Správa balíčků a backporty jako v Linuxu tu zpravidla neexistují.

Jak běží PHP v IIS

Na serverech Windows připojuje IIS PHP přes modul FastCGI. Pro každou verzi PHP existuje záznam FastCGI ukazující na php-cgi.exe a přiřazení handleru, které k němu směruje soubory s příponou .php. IIS podle potřeby spouští několik procesů php-cgi a drží je aktivní pro další požadavky.

Na rozdíl od Linuxu PHP zde většinou nepochází ze správy balíčků, ale jako archiv ZIP s windowsovými sestaveními projektu PHP, jako součást odborné aplikace nebo přes starší instalátory. To znamená: aktualizace neprobíhají automaticky a neexistují backporty od distributora. Rozhodující je číslo verze nainstalovaných souborů.

Co PHP2Shell znamená pro servery Windows

PHP2Shell zahrnuje CVE-2026-109618 a CVE-2026-109619 v samotném PHP, každou s CVSS v4.0 9,2. Obě umožňují spuštění kódu bez přihlášení. Projekt PHP uvádí php-cgi výslovně mezi postiženými provozními režimy. Opraveny jsou PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35.

Pro PHP 8.1 a starší už oficiální aktualizace neexistují. Servery Windows s odbornými aplikacemi podle zkušenosti často běží na takových stavech, protože aplikace vyžaduje určitou verzi. Zde je vedle přechodných opatření nutné vyjasnění s výrobcem aplikace. Pozadí tohoto provozního režimu najdete na stránce php-cgi: zastaralý režim s rizikem.

Aktualizace PHP v IIS: najít instalace

Následující příkazy PowerShellu jen čtou. Ukazují, které instalace PHP IIS používá a jakou mají verzi. Cesty jsou příklady.

# Záznamy FastCGI v IIS: která php-cgi.exe se používá?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi

# Verze každé nalezené instalace (cesta jako příklad)
& "C:\PHP\8.3\php.exe" -v

# Běžící procesy php-cgi s časem spuštění
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path

Navíc prohledejte všechny disky na další php-cgi.exe, protože odborné aplikace někdy přinášejí vlastní kopie. U každé instalace si poznamenejte verzi, variantu (Thread Safe nebo Non Thread Safe) a architekturu.

Nasadit aktualizaci a recyklovat aplikační pooly

Opravenou verzi stáhněte z oficiálních windowsových sestavení projektu PHP, na která odkazuje php.net, ve stejné variantě a architektuře. Osvědčilo se rozbalit novou verzi do nové složky, převzít stávající php.ini a potřebná rozšíření a poté přepnout záznam FastCGI na novou cestu. Starý stav tak zůstane zachován pro cestu zpět.

# Recyklovat aplikační pool (název jako příklad)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"

# Případně restartovat všechny služby IIS
iisreset

# Kontrola: byly všechny procesy php-cgi po aktualizaci spuštěny znovu?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path

Každý proces php-cgi musí mít čas spuštění po aktualizaci a ukazovat na novou cestu. Poté otestujte weby. Starou složku PHP odstraňte, jakmile nový stav stabilně běží, aby se omylem nezačala používat znovu.

Důležité

Nové soubory ve složce PHP nestačí, dokud běží staré procesy php-cgi. Záplata je účinná teprve po recyklaci poolů nebo restartu IIS.

Přechodná opatření v php.ini

Pokud instalaci nelze aktualizovat okamžitě, doporučuje php.net přechodná opatření bez úplné ochrany. V IIS nastavte hodnoty v centrální php.ini příslušné instalace. Soubory .user.ini a ini_set() podle php.net nestačí.

; php.ini dotčené instalace
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

S funkcí nahrávání souborů uvádí php.net post_max_size = 32M. Na PHP 8.5 přibývá fatal_error_backtraces=0. Aby weby hodnoty nemohly měnit vlastními soubory .user.ini, lze v centrální php.ini nastavit user_ini.filename na prázdnou hodnotu; předem ověřte, zda na tom aplikace nezávisejí. Poté pooly recyklujte. BSI (německý Spolkový úřad pro informační bezpečnost) doporučuje webové servery dočasně odpojit od sítě, pokud aktualizace není okamžitě možná. Další nastavení vysvětluje stránka Bezpečná konfigurace php.ini.

Po aktualizaci

Záplata neodstraní škodlivý software zavlečený dříve. Uchovejte protokoly IIS od 20. 10. 2026, zkontrolujte webové adresáře na nové soubory skriptů a prohlédněte plánované úlohy a místní uživatelské účty, zda neobsahují něco neznámého. Pokud server běží v doméně, patří k tomu i pohled na přihlášení.

Dávejte navíc pozor na oprávnění identit aplikačních poolů. Pokud pool běží pod účtem, který má právo zápisu do celého webového adresáře nebo dokonce administrátorská práva, může útočník po úspěšném průniku způsobit podstatně víc škody. Smysl má vlastní omezená identita pro každý pool s právem zápisu jen tam, kde ji aplikace skutečně potřebuje, například ve složce pro nahrávání nebo cache. V těchto složkách by IIS neměl spouštět soubory PHP; to lze upravit přes přiřazení handlerů dané složky. Zkontrolujte také, zda ve webovém adresáři neleží staré testovací a instalační soubory, například výstupy phpinfo, a odstraňte je.

Jak konkrétně pomáhá PHP SOS?

  • Najdeme všechny instalace PHP na vašich serverech Windows, včetně kopií v odborných aplikacích.
  • Prostřednictvím služby záplatování PHP PHP vyměníme, recyklujeme pooly a zdokumentujeme verzi a časy procesů.
  • U starých verzí s vámi a výrobcem aplikace vyjasníme cestu k migraci na podporovanou verzi PHP.
  • Zkontrolujeme servery na stopy útoku a zajistíme protokoly.

Časté dotazy

Kterou variantu PHP potřebuji pro IIS?

Pro IIS s FastCGI se obvykle používá varianta Non-Thread-Safe (NTS). Při aktualizaci dbejte na to, abyste znovu zvolili stejnou variantu a architekturu, aby rozšíření dál odpovídala.

Stačí rozbalit novou složku PHP?

Ne. IIS drží procesy php-cgi.exe nějakou dobu aktivní. Recyklujte aplikační pooly nebo restartujte IIS a zkontrolujte, že už neběží žádné staré procesy.

Mohu na jednom IIS provozovat více verzí PHP?

Ano, přes více záznamů FastCGI a přiřazení handlerů pro každý web. Zvyšuje to ale pracnost údržby. Každá instalace vyžaduje vlastní aktualizaci a vlastní kontrolu.

Týká se PHP2Shell i PHP ve Windows?

Zranitelnosti jsou v samotném PHP. V IIS běží PHP zpravidla jako php-cgi, které projekt PHP výslovně řadí mezi postižené provozní režimy. Servery Windows proto řešte stejně naléhavě jako servery Linux.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc