# Zaštita PHP-a na Windowsu i IIS-u

> PHP IIS ažuriranje nakon PHP2Shella: pronađite instalacije na Windowsu, zamijenite PHP mapu, reciklirajte aplikacijske poolove i postavite privremene vrijednosti.

Izvor: https://phpsos.de/hr/server/windows-iis-php/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Na Windowsu s IIS-om PHP najčešće radi kao `php-cgi.exe` putem FastCGI-ja, načina rada koji PHP2Shell izričito pogađa. PHP IIS ažuriranje sastoji se od tri koraka: pronaći sve PHP instalacije, zamijeniti ih ispravljenom verzijom i reciklirati aplikacijske poolove. Upravljanja paketima i backporta kao na Linuxu ovdje u pravilu nema.

## Kako PHP radi pod IIS-om

Na Windows poslužiteljima IIS PHP povezuje putem FastCGI modula. Za svaku PHP verziju postoji FastCGI unos koji pokazuje na `php-cgi.exe` i dodjela handlera koja tamo usmjerava datoteke s nastavkom `.php`. IIS po potrebi pokreće više php-cgi procesa i drži ih aktivnima za daljnje zahtjeve.

Za razliku od Linuxa, PHP ovdje najčešće ne dolazi iz upravljanja paketima, nego kao ZIP arhiva Windows izdanja PHP projekta, kao dio stručne aplikacije ili putem starijih instalera. To znači: ažuriranja se ne događaju automatski i nema backporta distributera. Mjerodavan je broj verzije instaliranih datoteka.

## Što PHP2Shell znači za Windows poslužitelje

PHP2Shell obuhvaća CVE-2026-109618 i CVE-2026-109619 u samom PHP-u, svaki s CVSS v4.0 9,2. Obje omogućuju izvršavanje koda bez prijave. PHP projekt izričito navodi php-cgi među pogođenim načinima rada. Ispravljeni su PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35.

Za PHP 8.1 i starije više nema službenih ažuriranja. Windows poslužitelji sa stručnim aplikacijama prema iskustvu često rade na takvim stanjima jer aplikacija zahtijeva određenu verziju. Ovdje je uz privremene mjere potrebno razjašnjenje s proizvođačem aplikacije. Pozadina ovog načina rada nalazi se u članku [php-cgi: naslijeđeni rizik](https://phpsos.de/hr/server/php-cgi/).

## PHP IIS ažuriranje: pronađite instalacije

Sljedeće PowerShell naredbe samo čitaju. Pokazuju koje PHP instalacije IIS koristi i koju imaju verziju. Putanje su primjeri.

```powershell
# FastCGI unosi u IIS-u: koji se php-cgi.exe koristi?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi

# Verzija svake pronađene instalacije (putanja kao primjer)
& "C:\PHP\8.3\php.exe" -v

# php-cgi procesi koji rade s vremenom pokretanja
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
```

Dodatno na svim pogonima potražite daljnje `php-cgi.exe`, jer stručne aplikacije ponekad donose vlastite kopije. Za svaku instalaciju zabilježite verziju, varijantu (Thread Safe ili Non Thread Safe) i arhitekturu.

## Instalirajte ažuriranje i reciklirajte aplikacijske poolove

Ispravljenu verziju preuzmite iz službenih Windows izdanja PHP projekta koja su povezana s php.net-a, u istoj varijanti i arhitekturi. Dokazalo se da novu verziju treba raspakirati u novu mapu, preuzeti postojeći php.ini i potrebna proširenja te zatim FastCGI unos prebaciti na novu putanju. Tako staro stanje ostaje sačuvano za povratak.

```powershell
# Reciklirajte aplikacijski pool (naziv kao primjer)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"

# Alternativno ponovno pokrenite sve IIS usluge
iisreset

# Kontrola: jesu li svi php-cgi procesi pokrenuti nakon ažuriranja?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
```

Svaki php-cgi proces mora imati vrijeme pokretanja nakon ažuriranja i pokazivati na novu putanju. Zatim testirajte web-stranice. Staru PHP mapu uklonite čim novo stanje stabilno radi kako se ne bi slučajno ponovno uključila.

> **Važno:**
> Nove datoteke u PHP mapi nisu dovoljne dok rade stari php-cgi procesi. Zakrpa je djelotvorna tek nakon recikliranja poolova ili ponovnog pokretanja IIS-a.

## Privremene mjere u php.ini

Ako se neka instalacija ne može odmah ažurirati, php.net preporučuje privremene mjere bez potpune zaštite. Pod IIS-om vrijednosti postavite u središnji php.ini dotične instalacije. Datoteke `.user.ini` i `ini_set()` prema php.net-u nisu dovoljni.

```ini
; php.ini pogođene instalacije
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
```

Uz funkciju uploada php.net navodi `post_max_size = 32M`. Na PHP-u 8.5 dodaje se `fatal_error_backtraces=0`. Kako web-stranice vrijednosti ne bi mijenjale vlastitim `.user.ini` datotekama, `user_ini.filename` u središnjem php.ini može se postaviti na prazno; prethodno provjerite jesu li aplikacije o tome ovisne. Zatim reciklirajte poolove. BSI (njemački Savezni ured za informacijsku sigurnost) preporučuje da se web-poslužitelji privremeno odvoje s mreže ako ažuriranje nije odmah moguće. Dodatne postavke objašnjava članak [Sigurna konfiguracija php.ini](https://phpsos.de/hr/ratgeber/php-ini-sicher-konfigurieren/).

## Nakon ažuriranja

Zakrpa ne uklanja zlonamjerni softver koji je ubačen prije. Sačuvajte IIS zapisnike od 20. 10. 2026., provjerite web direktorije zbog novih skriptnih datoteka te planirane zadatke i lokalne korisničke račune zbog nepoznatih unosa. Ako poslužitelj radi u domeni, tu spada i pogled na prijave.

Obratite pozornost i na prava identiteta aplikacijskih poolova. Ako pool radi s računom koji ima pravo pisanja na cijeli web direktorij ili čak administratorska prava, napadač nakon uspješne provale može učiniti znatno više štete. Smislen je zaseban, ograničen identitet po poolu s pravom pisanja samo tamo gdje ga aplikacija stvarno treba, primjerice u mapi za upload ili predmemoriju. U tim mapama IIS ne bi smio izvršavati PHP datoteke; to se može urediti putem dodjela handlera pojedine mape. Provjerite i leže li u web direktoriju stare testne i instalacijske datoteke poput phpinfo ispisa, te ih uklonite.

## Kako PHP SOS konkretno pomaže?

- Pronalazimo sve PHP instalacije na Vašim Windows poslužiteljima, uključujući kopije u stručnim aplikacijama.
- Putem [usluge PHP zakrpa](https://phpsos.de/hr/leistungen/php-patch-service/) zamjenjujemo PHP, recikliramo poolove i dokumentiramo verziju i vremena procesa.
- Kod starih verzija s Vama i proizvođačem aplikacije razjašnjavamo put prema [migraciji na podržanu PHP verziju](https://phpsos.de/hr/leistungen/php-migration-legacy/).
- Provjeravamo poslužitelje zbog tragova napada i osiguravamo zapisnike.


## Česta pitanja

**Koju PHP varijantu trebam za IIS?**  
Za IIS s FastCGI-jem obično se koristi varijanta Non-Thread-Safe (NTS). Pri ažuriranju pazite da ponovno odaberete istu varijantu i arhitekturu kako bi proširenja i dalje odgovarala.

**Je li dovoljno raspakirati novu PHP mapu?**  
Ne. IIS php-cgi.exe procese neko vrijeme drži aktivnima. Reciklirajte aplikacijske poolove ili ponovno pokrenite IIS i provjerite da više ne rade stari procesi.

**Mogu li na jednom IIS-u pokretati više PHP verzija?**  
Da, putem više FastCGI unosa i dodjela handlera po web-stranici. To ipak povećava trud održavanja. Svaka instalacija traži vlastito ažuriranje i vlastitu kontrolu.

**Pogađa li PHP2Shell PHP na Windowsu?**  
Ranjivosti se nalaze u samom PHP-u. Pod IIS-om PHP u pravilu radi kao php-cgi, koji PHP projekt izričito ubraja među pogođene načine rada. Windows poslužitelje zato tretirajte jednako hitno kao Linux poslužitelje.

## Izvori

- [php.net: sigurnosne objave](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: podržane verzije](https://www.php.net/supported-versions.php)
- [BSI](https://www.bsi.bund.de/)
