# Zaščita PHP v sistemu Windows in IIS

> Posodobitev PHP v IIS po PHP2Shell: poiščite namestitve v sistemu Windows, zamenjajte imenik PHP, reciklirajte skupine aplikacij in nastavite vmesne vrednosti.

Vir: https://phpsos.de/sl/server/windows-iis-php/  
Stanje: 25.10.2026  
Ponudnik: PHP SOS, Nujna pomoč za PHP in varnost strežnikov. Takojšnja pomoč po WhatsAppu: https://wa.me/491736494914?text=Pozdravljeni%2C%20PHP%20SOS%2C%20potrebujemo%20pomo%C4%8D%20z%20na%C5%A1im%20stre%C5%BEnikom%20PHP.%20Podjetje%3A%20%E2%80%A6%20Spletna%20stran%3A%20%E2%80%A6

**Na kratko:** V sistemu Windows z IIS PHP večinoma teče kot `php-cgi.exe` prek FastCGI, kar je način delovanja, ki ga PHP2Shell izrecno zadeva. Posodobitev PHP v IIS sestoji iz treh korakov: poiščite vse namestitve PHP, jih nadomestite z odpravljeno različico in reciklirajte skupine aplikacij. Upravljanja paketov in backportov kot v Linuxu tu praviloma ni.

## Kako PHP teče v IIS

Na strežnikih Windows IIS PHP poveže prek modula FastCGI. Za vsako različico PHP obstaja vnos FastCGI, ki kaže na `php-cgi.exe`, in dodelitev handlerja, ki datoteke s končnico `.php` usmeri tja. IIS po potrebi zažene več procesov php-cgi in jih ohranja aktivne za nadaljnje zahteve.

V nasprotju z Linuxom PHP tu večinoma ne prihaja iz upravitelja paketov, temveč kot arhiv ZIP gradenj projekta PHP za Windows, kot del strokovne aplikacije ali prek starejših namestitvenih programov. To pomeni: posodobitve se ne zgodijo samodejno in backportov distributerja ni. Odločilna je številka različice nameščenih datotek.

## Kaj PHP2Shell pomeni za strežnike Windows

PHP2Shell obsega CVE-2026-109618 in CVE-2026-109619 v samem PHP, vsaka s CVSS v4.0 9,2. Obe omogočata izvajanje kode brez prijave. Projekt PHP php-cgi izrecno navaja med prizadetimi načini delovanja. Odpravljeni so PHP 8.5.12, 8.4.27, 8.3.36 in 8.2.35.

Za PHP 8.1 in starejše uradnih posodobitev ni več. Strežniki Windows s strokovnimi aplikacijami po izkušnjah pogosto tečejo na takih stanjih, ker aplikacija zahteva določeno različico. Tu je poleg vmesnih ukrepov potrebna razjasnitev s proizvajalcem aplikacije. Ozadje tega načina delovanja je na strani [php-cgi: staro breme s tveganjem](https://phpsos.de/sl/server/php-cgi/).

## Posodobitev PHP v IIS: poiščite namestitve

Spodnji ukazi PowerShell samo berejo. Pokažejo, katere namestitve PHP uporablja IIS in katero različico imajo. Poti so primeri.

```powershell
# Vnosi FastCGI v IIS: katera php-cgi.exe se uporablja?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi

# Različica vsake najdene namestitve (pot kot primer)
& "C:\PHP\8.3\php.exe" -v

# Delujoči procesi php-cgi s časom zagona
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
```

Dodatno na vseh pogonih poiščite druge datoteke `php-cgi.exe`, ker strokovne aplikacije včasih prinesejo lastne kopije. Za vsako namestitev zapišite različico, varianto (Thread Safe ali Non Thread Safe) in arhitekturo.

## Namestite posodobitev in reciklirajte skupine aplikacij

Odpravljeno različico prenesite iz uradnih gradenj za Windows projekta PHP, ki so povezane s strani php.net, v isti varianti in arhitekturi. Obneslo se je, da novo različico razpakirate v nov imenik, prevzamete obstoječo php.ini in potrebne razširitve ter nato vnos FastCGI preusmerite na novo pot. Tako staro stanje ostane za pot nazaj.

```powershell
# Reciklirajte skupino aplikacij (ime kot primer)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"

# Druga možnost: znova zaženite vse storitve IIS
iisreset

# Kontrola: ali so vsi procesi php-cgi zagnani po posodobitvi?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
```

Vsak proces php-cgi mora imeti čas zagona po posodobitvi in kazati na novo pot. Nato preizkusite spletne strani. Stari imenik PHP odstranite, ko novo stanje stabilno teče, da se ne bi pomotoma znova vključil.

> **Pomembno:**
> Nove datoteke v imeniku PHP ne zadoščajo, dokler tečejo stari procesi php-cgi. Šele po recikliranju skupin ali ponovnem zagonu IIS je popravek učinkovit.

## Vmesni ukrepi v php.ini

Če namestitve ni mogoče takoj posodobiti, php.net priporoča vmesne ukrepe brez popolne zaščite. V IIS vrednosti nastavite v osrednji php.ini posamezne namestitve. Datoteke `.user.ini` in `ini_set()` po navedbah php.net ne zadoščajo.

```ini
; php.ini prizadete namestitve
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
```

S funkcijo nalaganja datotek php.net navaja `post_max_size = 32M`. Pri PHP 8.5 se doda `fatal_error_backtraces=0`. Da spletne strani vrednosti ne spreminjajo prek lastnih datotek `.user.ini`, lahko `user_ini.filename` v osrednji php.ini pustite prazen; prej preverite, ali se aplikacije nanj zanašajo. Nato reciklirajte skupine. BSI priporoča, da spletne strežnike začasno odklopite z omrežja, če posodobitev ni takoj mogoča. Dodatne nastavitve pojasnjuje stran [Varna konfiguracija php.ini](https://phpsos.de/sl/ratgeber/php-ini-sicher-konfigurieren/).

## Po posodobitvi

Popravek ne odstrani škodljive programske opreme, ki je bila vnesena prej. Zapisnike IIS hranite od 20. 10. 2026 naprej, spletne imenike preverite glede novih skriptnih datotek ter načrtovana opravila in lokalne uporabniške račune preglejte glede neznanega. Če strežnik teče v domeni, sodi zraven tudi pogled na prijave.

Dodatno bodite pozorni na pravice identitet skupin aplikacij. Če skupina teče z računom, ki ima pravice pisanja na celoten spletni imenik ali celo skrbniške pravice, lahko napadalec po uspešnem vdoru stori bistveno več škode. Smiselna je lastna, omejena identiteta za vsako skupino s pravicami pisanja samo tam, kjer jih aplikacija res potrebuje, na primer v imeniku za nalaganje ali predpomnilnik. V teh imenikih IIS ne sme izvajati datotek PHP; to je mogoče urediti prek dodelitev handlerjev posameznega imenika. Preverite tudi, ali v spletnem imeniku ležijo stare preskusne in namestitvene datoteke, kot so izpisi phpinfo, in jih odstranite.

## Kako PHP SOS konkretno pomaga?

- Poiščemo vse namestitve PHP na vaših strežnikih Windows, tudi kopije v strokovnih aplikacijah.
- Prek [storitve popravljanja PHP](https://phpsos.de/sl/leistungen/php-patch-service/) zamenjamo PHP, reciklirimo skupine in dokumentiramo različico ter čase procesov.
- Pri starih različicah z vami in proizvajalcem aplikacije razjasnimo pot do [migracije na podprto različico PHP](https://phpsos.de/sl/leistungen/php-migration-legacy/).
- Strežnike preverimo glede sledi napada in zavarujemo zapisnike.


## Pogosta vprašanja

**Katero različico PHP potrebujem za IIS?**  
Za IIS s FastCGI se običajno uporablja različica Non-Thread-Safe (NTS). Pri posodobitvi pazite, da znova izberete isto različico in arhitekturo, da razširitve še naprej ustrezajo.

**Ali zadošča, da razpakiram nov imenik PHP?**  
Ne. IIS procese php-cgi.exe nekaj časa ohranja aktivne. Reciklirajte skupine aplikacij ali znova zaženite IIS in preverite, da noben star proces ne teče več.

**Ali lahko na enem IIS poganjam več različic PHP?**  
Da, prek več vnosov FastCGI in dodelitev handlerjev za vsako spletno stran. To pa poveča vzdrževalni napor. Vsaka namestitev potrebuje svojo posodobitev in svojo kontrolo.

**Ali PHP2Shell zadeva PHP v sistemu Windows?**  
Ranljivosti so v samem PHP. V IIS PHP praviloma teče kot php-cgi, ki ga projekt PHP izrecno šteje med prizadete načine delovanja. Strežnike Windows zato obravnavajte enako nujno kot strežnike Linux.

## Viri

- [php.net: varnostna obvestila](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: podprte različice](https://www.php.net/supported-versions.php)
- [BSI (nemški zvezni urad za informacijsko varnost)](https://www.bsi.bund.de/)
