Kort sagt: I Windows uppdaterar ni PHP för hand: ladda den rättade versionen från php.net, välj samma variant (Thread Safe eller Non Thread Safe) och arkitektur, kontrollera nedladdningen med SHA-256, ta över php.ini och tilläggen, ställ om sökvägen och starta om alla PHP-processer. Uppdateringen är särskilt brådskande om Apache i Windows laddar PHP som modul, eftersom PHP-teamet bedömer det driftläget som högst vid PHP2Shell.
Var PHP finns överallt på Windows-datorer
Windows-servrar med PHP är vanligare än många tror. Sällan är det den stora webbplatsen, oftare intranät, fackprogram eller verktyg som någon satte upp för flera år sedan. Driften under IIS beskrivs utförligt på sidan Säkra PHP i Windows och IIS. Det här inlägget behandlar själva uppdateringen och fallen vid sidan av IIS.
Typiska fyndplatser är Apache för Windows med PHP som modul, utvecklarpaket som XAMPP, WampServer eller Laragon som har hamnat på en server, egna PHP-kopior i fackprogram och PHP-skript i schemalagda uppgifter. PowerShell-kommandona nedan läser bara och hjälper till att hitta dem:
# Hitta alla php.exe på enhet C: (tar en stund på stora enheter)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Vilken php.exe ligger i sökvägen?
where.exe php
# Körande PHP- och Apache-processer med sökväg och starttid
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Version och laddad konfiguration för en installation (sökvägen som exempel)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Viktigt: körs PHP som Apache-modul finns ingen egen PHP-process. PHP sitter då i processen httpd.exe. Den som bara letar efter php-cgi-processer förbiser de installationerna.
Lätt glömda är också schemalagda uppgifter som anropar PHP-skript, till exempel för importer, rapporter eller dataavstämningar. De använder ofta en egen, äldre php.exe. För PHP2Shell räknas de som mindre utsatta, eftersom kommandoraden enligt php.nets hittillsvarande uppgifter inte hör till de berörda driftlägena; vid utbytet måste de ändå peka på den nya sökvägen, annars förblir den gamla installationen i bruk och tas aldrig bort.
# Schemalagda uppgifter som anropar PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Ett eget ämne är utvecklardatorer. XAMPP och liknande paket startar Apache med PHP som modul och är ofta nåbara i hela företagsnätet. Även där ska PHP uppdateras, och webbservern bör bara lyssna på den egna datorn.
Thread Safe eller Non Thread Safe: rätt variant
php.net erbjuder varje Windows-version i flera varianter. Vid utbytet gäller: samma variant och arkitektur som tidigare, annars laddar inte webbserver eller tillägg.
| Egenskap | Alternativ | När vilken |
|---|---|---|
| Trådsäkerhet | NTS (Non Thread Safe), TS (Thread Safe) | enligt php.net NTS för FastCGI, till exempel IIS, och kommandoraden; TS för PHP som modul i Apache |
| Arkitektur | x64, x86 | php.net rekommenderar x64 |
| Kompilator | VS16, VS17 | kräver Visual C++ Redistributable för Visual Studio 2015 till 2022 |
För PHP 8.5 listade php.net vid hämtningen den 25 oktober 2026 versionen 8.5.12 från den 21 oktober 2026, som ZIP-arkiv i alla fyra kombinationerna. Övriga grenar som stöds väljer ni på samma sida. Rättade är 8.5.12, 8.4.27, 8.3.36 och 8.2.35. För 8.1 och äldre finns inga officiella uppdateringar längre.
PHP-uppdatering i Windows: kontrollera nedladdningen och byt rent
- Ladda den rättade versionen: från Windows-nedladdningssidan på php.net, passande för variant och arkitektur.
- Jämför kontrollsumman: php.net anger ett SHA-256-värde för varje arkiv. Avviker det använder ni inte filen.
- Packa upp i en ny mapp: till exempel
C:\PHP\8.4.27, så att den gamla nivån finns kvar som återväg. - Ta över konfigurationen: kopiera den tidigare
php.inioch jämför med den nyaphp.ini-production. - Kontrollera tilläggen: Ytterligare DLL-filer från tredjepartsleverantörer måste passa version, variant och arkitektur.
- Ställ om sökvägen: i FastCGI-posten, i
LoadModule-raden i Apache eller i miljövariabelnPATH. - Starta om och kontrollera: Starta om webbservertjänsten och schemalagda uppgifter, kontrollera sedan version och starttider.
# Beräkna SHA-256 för den nedladdade filen och jämför med php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# Efter bytet: laddade tillägg och version för den nya installationen
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Startar inte PHP efter bytet eller meddelar en saknad DLL saknas ofta Visual C++ Redistributable i rätt arkitektur, eller så passar ett tillägg inte till den nya versionen. Felet visar sig snabbast om ni anropar php.exe -v direkt på kommandoraden innan ni ställer om webbservern. Vad de enskilda posterna i php.ini gör förklaras i php.ini förklarad.
Apache i Windows: ta moduldriften på allvar
Många äldre Windows-installationer binder in PHP via en LoadModule-rad direkt i Apache. Tekniskt är det detsamma som mod_php under Linux. PHP-teamet bedömer risken från PHP2Shell som högst just där, eftersom en exploit har visats innan någon applikationskod ens körs. Bakgrunden finns under Varför mod_php är särskilt utsatt.
Vilka moduler en Apache laddar visar httpd.exe -M i installationens bin-mapp; kommandot läser bara. Står där en PHP-modul har uppdateringen företräde. På medellång sikt lönar sig bytet till PHP via FastCGI med NTS-build, så att PHP körs i egna processer. Det kräver ett test, eftersom konfiguration och rättigheter ändras.
Utbytet av filerna stänger ännu inte sårbarheten. Så länge Apache-tjänsten, IIS-applikationspooler eller schemalagda uppgifter körs med den gamla versionen förblir sårbarheten öppen. Kontrollera starttiden för varje process efter uppdateringen.
Efter uppdateringen: kontroll och spår
Notera för varje installation sökväg, version, variant och datum för bytet. Ta bort gamla PHP-mappar först när den nya nivån körs stabilt, och då på riktigt, så att de inte av misstag binds in igen.
En uppdatering tar inte bort skadlig kod. Var en Windows-server nåbar från internet under dagarna före patchen, kontrollera webbkatalogerna efter nya skriptfiler, schemalagda uppgifter och lokala konton efter okända inslag och säkra webbserverloggarna från och med den 20 oktober. Hur ni känner igen ett intrång beskrivs i Är jag redan komprometterad?.
Hur hjälper PHP SOS konkret?
- Hitta alla installationer: Vi söker efter PHP på era Windows-system, även i Apache-moduler, utvecklarpaket och fackprogram.
- Byta och styrka: Via PHP-patchtjänsten byter vi till den rättade versionen, kontrollerar kontrollsummor och dokumenterar version och processtart.
- Förbättra driftläget: Där PHP körs som Apache-modul planerar och testar vi övergången till FastCGI.
- Kontrollera spår: Vi säkrar loggar och granskar systemen efter tecken på ett angrepp.
Vanliga frågor
Uppdaterar Windows Update även PHP?
Nej. PHP ingår inte i Windows. Det kommer som ZIP-arkiv från php.net, som del av ett paket som XAMPP eller med ett fackprogram och måste uppdateras på just den vägen.
Behöver jag Thread-Safe- eller Non-Thread-Safe-versionen?
Enligt php.net är NTS avsedd för FastCGI, alltså till exempel för IIS, och för kommandoraden. TS är avsedd för drift som modul i webbservern, till exempel i Apache. Ta vid uppdateringen samma variant som tidigare.
Hur kontrollerar jag att PHP-nedladdningen är äkta?
php.net anger en SHA-256-kontrollsumma för varje Windows-arkiv. Med Get-FileHash i PowerShell beräknar ni den nedladdade filens kontrollsumma och jämför båda värdena tecken för tecken.
Jag använder XAMPP på en server. Vad nu?
Paket som XAMPP levererar eget PHP och eget Apache, ofta med PHP som Apache-modul. Kontrollera om projektet erbjuder en version med rättat PHP, och ställ annars om installationen till en underhållen lösning. För produktiv drift är sådana utvecklarpaket ändå inte avsedda.