Lühidalt: Windowsis koos IIS-iga töötab PHP enamasti php-cgi.exe-na FastCGI kaudu, mis on PHP2Shelli poolt selgesõnaliselt mõjutatud töörežiim. PHP IIS uuendus koosneb kolmest sammust: leida kõik PHP paigaldused, asendada need parandatud versiooniga ja taaskäitada rakendusepoolid. Paketihaldust ja backporte nagu Linuxis siin reeglina ei ole.
Kuidas PHP IIS-is töötab
Windowsi serverites ühendab IIS PHP FastCGI mooduli kaudu. Iga PHP versiooni jaoks on FastCGI kirje, mis viitab php-cgi.exe-le, ja käsitleja seos, mis suunab laiendiga .php failid sinna. IIS käivitab vajaduse korral mitu php-cgi protsessi ja hoiab neid järgmiste päringute jaoks aktiivsena.
Erinevalt Linuxist ei tule PHP siin enamasti paketihaldusest, vaid PHP projekti Windowsi ehituste ZIP-arhiivina, mõne erialarakenduse osana või vanemate paigaldajate kaudu. See tähendab: uuendused ei toimu automaatselt ja distributori backporte ei ole. Otsustav on paigaldatud failide versiooninumber.
Mida PHP2Shell Windowsi serveritele tähendab
PHP2Shell hõlmab PHP-s endas olevaid turvauke CVE-2026-109618 ja CVE-2026-109619, kumbki hindega CVSS v4.0 9,2. Mõlemad võimaldavad koodi käivitamist ilma sisselogimata. PHP projekt nimetab php-cgi selgesõnaliselt mõjutatud töörežiimide hulgas. Parandatud on PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35.
PHP 8.1 ja vanemate jaoks ametlikke uuendusi enam ei ole. Erialarakendustega Windowsi serverid töötavad kogemuse põhjal sageli just sellistel seisudel, sest rakendus nõuab kindlat versiooni. Siin on lisaks ajutistele meetmetele vajalik selgitus rakenduse tootjaga. Tausta selle töörežiimi kohta leiate lehelt php-cgi: riskantne vanapärand.
PHP IIS uuendus: leidke paigaldused
Järgmised PowerShelli käsud ainult loevad. Need näitavad, milliseid PHP paigaldusi IIS kasutab ja millise versiooniga. Teekonnad on näited.
# FastCGI-kirjed IIS-is: milline php-cgi.exe on kasutusel?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Iga leitud paigalduse versioon (tee on näide)
& "C:\PHP\8.3\php.exe" -v
# Töötavad php-cgi protsessid koos käivitusajaga
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Otsige lisaks kõigilt draividelt täiendavaid php-cgi.exe faile, sest erialarakendused toovad vahel kaasa oma koopiad. Märkige iga paigalduse kohta üles versioon, variant (Thread Safe või Non Thread Safe) ja arhitektuur.
Paigaldage uuendus ja taaskäitage rakendusepoolid
Laadige parandatud versioon alla PHP projekti ametlikest Windowsi ehitustest, millele php.net viitab, samas variandis ja arhitektuuris. Tõestatud on pakkida uus versioon lahti uude kausta, võtta üle olemasolev php.ini ja vajalikud laiendused ning seejärel seadistada FastCGI kirje uuele teekonnale. Nii jääb vana seis tagasitee jaoks alles.
# Rakendusepooli taaskäitamine (nimi on näide)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Alternatiiv: käivitada kõik IIS-i teenused uuesti
iisreset
# Kontroll: kas kõik php-cgi protsessid on käivitatud pärast uuendust?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Iga php-cgi protsessi käivitusaeg peab olema pärast uuendust ja protsess peab viitama uuele teekonnale. Testige seejärel veebisaite. Eemaldage vana PHP kaust, kui uus seis töötab stabiilselt, et seda kogemata uuesti ei seotaks.
Uutest failidest PHP kaustas ei piisa, kuni vanad php-cgi protsessid töötavad. Paik on mõjus alles pärast poolide taaskäitamist või IIS-i taaskäivitust.
Ajutised meetmed php.ini-s
Kui paigaldust ei saa kohe uuendada, soovitab php.net ajutisi meetmeid ilma täieliku kaitseta. IIS-is seadke väärtused vastava paigalduse keskses php.ini-s. .user.ini failidest ja ini_set()-ist php.net-i järgi ei piisa.
; betroffenen paigalduse php.ini
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Üleslaadimisfunktsiooniga nimetab php.net post_max_size = 32M. PHP 8.5 puhul lisandub fatal_error_backtraces=0. Et veebisaidid ei muudaks väärtusi oma .user.ini failide kaudu, saab keskses php.ini-s user_ini.filename tühjaks jätta; kontrollige enne, kas rakendused sellest sõltuvad. Seejärel taaskäitage poolid. BSI soovitab veebiserverid ajutiselt võrgust lahti ühendada, kui uuendus ei ole kohe võimalik. Täiendavaid sätteid selgitab leht php.ini turvaline seadistamine.
Pärast uuendust
Paik ei eemalda pahavara, mis toodi sisse varem. Säilitage IIS-i protokollid alates 20.10.2026, kontrollige veebikataloogides uusi skriptifaile ning vaadake üle ajastatud ülesanded ja kohalikud kasutajakontod tundmatu suhtes. Kui server töötab domeenis, kuulub asjasse ka pilk sisselogimistele.
Jälgige lisaks rakendusepoolide identiteetide õigusi. Kui pool töötab kontoga, millel on kirjutusõigused kogu veebikataloogile või isegi administraatoriõigused, saab ründaja pärast edukat sissemurdmist teha märgatavalt rohkem kahju. Mõistlik on eraldi piiratud identiteet iga pooli jaoks, kirjutusõigustega ainult seal, kus rakendus neid tegelikult vajab, näiteks üleslaadimis- või vahemälukaustas. Neis kaustades ei tohiks IIS PHP faile käivitada; seda saab reguleerida vastava kausta käsitlejate seostega. Kontrollige ka, kas veebikataloogis on vanu test- ja paigaldusfaile nagu phpinfo väljundid, ning eemaldage need.
Kuidas PHP SOS konkreetselt aitab?
- Leiame teie Windowsi serverite kõik PHP paigaldused, ka erialarakendustes olevad koopiad.
- PHP paikamisteenuse kaudu vahetame PHP välja, taaskäitame poolid ja dokumenteerime versiooni ja protsesside ajad.
- Vanade versioonide puhul selgitame koos teie ja rakenduse tootjaga tee üleminekuks toetatud PHP versioonile.
- Kontrollime servereid rünnaku jälgede suhtes ja kindlustame protokollid.
Korduma kippuvad küsimused
Millist PHP varianti ma IIS-i jaoks vajan?
IIS-i ja FastCGI jaoks kasutatakse tavaliselt Non-Thread-Safe varianti (NTS). Jälgige uuendamisel, et valite jälle sama variandi ja arhitektuuri, et laiendused edasi sobiksid.
Kas piisab uue PHP kausta lahtipakkimisest?
Ei. IIS hoiab php-cgi.exe protsesse mõnda aega aktiivsena. Taaskäitage rakendusepoolid või käivitage IIS uuesti ja kontrollige, et vanu protsesse enam ei tööta.
Kas ma saan ühes IIS-is käitada mitut PHP versiooni?
Jah, mitme FastCGI kirje ja käsitleja seose kaudu veebisaidi kohta. See suurendab aga hoolduse mahtu. Iga paigaldus vajab oma uuendust ja oma kontrolli.
Kas PHP2Shell mõjutab PHP-d Windowsis?
Turvaaugud asuvad PHP-s endas. IIS-is töötab PHP reeglina php-cgi-na, mille PHP projekt loeb selgesõnaliselt mõjutatud töörežiimide hulka. Käsitlege Windowsi servereid seetõttu sama kiireloomuliselt kui Linuxi servereid.