Kort gezegd: Onder Windows met IIS draait PHP meestal als php-cgi.exe via FastCGI, een uitvoeringsmodus die door PHP2Shell uitdrukkelijk wordt getroffen. Een PHP IIS-update bestaat uit drie stappen: alle PHP-installaties vinden, ze vervangen door een gecorrigeerde versie en de toepassingspools recyclen. Pakketbeheer en backports zoals onder Linux zijn hier in de regel niet beschikbaar.
Hoe PHP onder IIS draait
Op Windows-servers koppelt IIS PHP via de FastCGI-module. Voor elke PHP-versie is er een FastCGI-vermelding die naar een php-cgi.exe wijst, en een handlertoewijzing die bestanden met de extensie .php daarheen leidt. IIS start naar behoefte meerdere php-cgi-processen en houdt ze actief voor volgende verzoeken.
Anders dan onder Linux komt PHP hier meestal niet uit een pakketbeheerder, maar als ZIP-archief van de Windows-builds van het PHP-project, als onderdeel van een vakspecifieke toepassing of via oudere installatieprogramma's. Dat betekent: updates gebeuren niet automatisch en er zijn geen backports van een distributeur. Beslissend is het versienummer van de geïnstalleerde bestanden.
Wat PHP2Shell voor Windows-servers betekent
PHP2Shell omvat CVE-2026-109618 en CVE-2026-109619 in PHP zelf, elk met CVSS v4.0 9.2. Beide maken het uitvoeren van code zonder inloggen mogelijk. Het PHP-project noemt php-cgi uitdrukkelijk onder de getroffen uitvoeringsmodi. Verholpen zijn PHP 8.5.12, 8.4.27, 8.3.36 en 8.2.35.
Voor PHP 8.1 en ouder zijn er geen officiële updates meer. Windows-servers met vakspecifieke toepassingen draaien naar ervaring vaak op zulke versies, omdat de toepassing een bepaalde versie vereist. Hier is naast de overbruggingsmaatregelen een afstemming met de fabrikant van de toepassing nodig. Achtergrond over deze uitvoeringsmodus vindt u onder php-cgi: oude erfenis met risico.
PHP IIS-update: installaties vinden
De volgende PowerShell-opdrachten lezen alleen. Ze tonen welke PHP-installaties IIS gebruikt en welke versie ze hebben. Paden zijn voorbeelden.
# FastCGI-vermeldingen in IIS: welke php-cgi.exe wordt gebruikt?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Versie van elke gevonden installatie (pad als voorbeeld)
& "C:\PHP\8.3\php.exe" -v
# Lopende php-cgi-processen met starttijd
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Zoek bovendien op alle schijven naar andere php-cgi.exe, want vakspecifieke toepassingen brengen soms eigen kopieën mee. Noteer per installatie versie, variant (Thread Safe of Non Thread Safe) en architectuur.
Update doorvoeren en toepassingspools recyclen
Download de gecorrigeerde versie van de officiële Windows-builds van het PHP-project, waarnaar php.net verwijst, in dezelfde variant en architectuur. Het heeft zich bewezen de nieuwe versie in een nieuwe map uit te pakken, de bestaande php.ini en de benodigde extensies over te nemen en dan de FastCGI-vermelding om te zetten naar het nieuwe pad. Zo blijft de oude status behouden voor een terugweg.
# Toepassingspool recyclen (naam als voorbeeld)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Of alle IIS-diensten herstarten
iisreset
# Controle: zijn alle php-cgi-processen na de update gestart?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Elk php-cgi-proces moet een starttijd na de update hebben en naar het nieuwe pad wijzen. Test daarna de websites. Verwijder de oude PHP-map zodra de nieuwe status stabiel draait, zodat hij niet per ongeluk opnieuw wordt ingebonden.
Nieuwe bestanden in de PHP-map volstaan niet zolang oude php-cgi-processen draaien. Pas na het recyclen van de pools of een herstart van IIS is de patch effectief.
Overbruggingsmaatregelen in de php.ini
Kan een installatie niet meteen worden bijgewerkt, dan adviseert php.net overbruggingsmaatregelen zonder volledige bescherming. Onder IIS stelt u de waarden in de centrale php.ini van de betreffende installatie in. .user.ini-bestanden en ini_set() volstaan volgens php.net niet.
; php.ini van de getroffen installatie
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Met uploadfunctie noemt php.net post_max_size = 32M. Op PHP 8.5 komt fatal_error_backtraces=0 erbij. Zodat websites de waarden niet via eigen .user.ini-bestanden wijzigen, kan user_ini.filename in de centrale php.ini leeg worden gezet; controleer vooraf of toepassingen daarvan afhankelijk zijn. Recycle daarna de pools. Het BSI (de Duitse federale dienst voor informatiebeveiliging) adviseert webservers tijdelijk van het net te halen als de update niet meteen mogelijk is. Meer instellingen licht php.ini veilig configureren toe.
Na de update
Een patch verwijdert geen schadelijke software die eerder is ingebracht. Bewaar de IIS-logs vanaf 20-10-2026, controleer webmappen op nieuwe scriptbestanden en controleer geplande taken en lokale gebruikersaccounts op onbekende vermeldingen. Draait de server in een domein, dan hoort ook een blik op aanmeldingen erbij.
Let bovendien op de rechten van de identiteiten van de toepassingspools. Draait een pool met een account dat schrijfrechten heeft op de hele webmap of zelfs beheerdersrechten, dan kan een aanvaller na een geslaagde inbraak aanzienlijk meer schade aanrichten. Zinvol is een eigen, beperkte identiteit per pool met schrijfrechten alleen waar de toepassing ze werkelijk nodig heeft, bijvoorbeeld in de upload- of cachemap. In deze mappen mag IIS geen PHP-bestanden uitvoeren; dat is te regelen via de handlertoewijzingen van de betreffende map. Controleer ook of oude test- en installatiebestanden zoals phpinfo-uitvoer in de webmap staan, en verwijder ze.
Hoe helpt PHP SOS concreet?
- Wij vinden alle PHP-installaties op uw Windows-servers, ook kopieën in vakspecifieke toepassingen.
- Via de PHP-patchservice vervangen we PHP, recyclen we de pools en documenteren we versie en procestijden.
- Bij oude versies zoeken we samen met u en de toepassingsfabrikant de weg naar de migratie naar een ondersteunde PHP-versie.
- Wij controleren de servers op sporen van een aanval en leggen de logs vast.
Veelgestelde vragen
Welke PHP-variant heb ik nodig voor IIS?
Voor IIS met FastCGI wordt gewoonlijk de Non-Thread-Safe-variant (NTS) gebruikt. Kies bij de update opnieuw dezelfde variant en architectuur, zodat extensies blijven passen.
Volstaat het om de nieuwe PHP-map uit te pakken?
Nee. IIS houdt php-cgi.exe-processen een tijd actief. Recycle de toepassingspools of herstart IIS en controleer dat er geen oude processen meer draaien.
Kan ik meerdere PHP-versies op één IIS draaien?
Ja, via meerdere FastCGI-vermeldingen en handlertoewijzingen per website. Dat verhoogt echter de onderhoudslast. Elke installatie heeft een eigen update en een eigen controle nodig.
Wordt PHP onder Windows getroffen door PHP2Shell?
De kwetsbaarheden zitten in PHP zelf. Onder IIS draait PHP in de regel als php-cgi, dat het PHP-project uitdrukkelijk tot de getroffen uitvoeringsmodi rekent. Behandel Windows-servers daarom net zo urgent als Linux-servers.