Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

PHP:n päivittäminen Windowsissa

Windowsissa ei ole automaattista PHP-päivitystä. Kun valitsette oikean variantin, tarkistatte latauksen ja käynnistätte kaikki prosessit uudelleen, PHP2Shell-korjaus saadaan siististi jokaiselle koneelle.

Tilanne Lukuaika 5 minHosting ja jakelut

Lyhyesti: Windowsissa päivitätte PHP:n käsin: ladatkaa korjattu versio php.netistä, valitkaa sama variantti (Thread Safe tai Non Thread Safe) ja arkkitehtuuri, tarkistakaa lataus SHA-256:lla, siirtäkää php.ini ja laajennukset, vaihtakaa polku ja käynnistäkää kaikki PHP-prosessit uudelleen. Päivitys on erityisen kiireellinen, jos Apache lataa Windowsissa PHP:n moduulina, sillä tämän ajotavan PHP-tiimi arvioi PHP2Shellin kohdalla riskialtteimmaksi.

Missä kaikkialla PHP piilee Windows-koneilla

Windows-palvelimia PHP:llä on useammin kuin monet ajattelevat. Harvoin kyse on suuresta verkkosivustosta, usein intraneteista, erikoissovelluksista tai työkaluista, jotka joku on pystyttänyt vuosia sitten. IIS:llä toimimista kuvataan perusteellisesti sivulla PHP:n suojaaminen Windowsissa ja IIS:ssä. Tämä artikkeli käsittelee itse päivitystä ja IIS:n ulkopuolisia tapauksia.

Tyypillisiä löytöpaikkoja ovat Apache for Windows PHP-moduulilla, kehittäjäpaketit kuten XAMPP, WampServer tai Laragon, jotka ovat päätyneet palvelimelle, erikoissovellusten omat PHP-kopiot ja ajastetuissa tehtävissä olevat PHP-skriptit. Seuraavat PowerShell-komennot vain lukevat ja auttavat löytämisessä:

# Etsi kaikki php.exe-tiedostot asemalta C: (suurilla asemilla kestää hetken)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Mikä php.exe on hakupolulla?
where.exe php

# Käynnissä olevat PHP- ja Apache-prosessit polun ja käynnistysajan kanssa
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Asennuksen versio ja ladattu konfiguraatio (polku esimerkkinä)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini

Tärkeää: jos PHP toimii Apache-moduulina, omaa PHP-prosessia ei ole. PHP on silloin prosessissa httpd.exe. Jos etsii vain php-cgi-prosesseja, nämä asennukset jäävät huomaamatta.

Helposti unohtuvat myös ajastetut tehtävät, jotka kutsuvat PHP-skriptejä, esimerkiksi tuonteja, raportteja tai tietojen täsmäytyksiä. Ne käyttävät usein omaa, vanhempaa php.exe-tiedostoa. PHP2Shellin kannalta ne ovat vähemmän alttiita, koska komentorivi ei php.netin toistaiseksi antamien tietojen mukaan kuulu haavoittuviin ajotapoihin; vaihdon yhteydessä niiden on silti osoitettava uuteen polkuun, muuten vanha asennus pysyy käytössä eikä sitä koskaan poisteta.

# Ajastetut tehtävät, jotka kutsuvat PHP:tä
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}

Oma aiheensa ovat kehittäjien koneet. XAMPP ja vastaavat paketit käynnistävät Apachen PHP:n kanssa moduulina ja ovat usein tavoitettavissa koko yrityksen verkossa. Niissäkin PHP on päivitettävä, ja verkkopalvelimen pitäisi kuunnella vain omaa konetta.

Thread Safe vai Non Thread Safe: oikea variantti

php.net tarjoaa jokaisen Windows-version useina variantteina. Vaihdossa pätee: sama variantti ja arkkitehtuuri kuin tähän asti, muuten verkkopalvelin tai laajennukset eivät lataudu.

Ominaisuus Vaihtoehdot Milloin mikä
Säikeiden turvallisuus NTS (Non Thread Safe), TS (Thread Safe) php.netin mukaan NTS FastCGI:lle, esim. IIS, ja komentoriville; TS PHP:lle moduulina Apachessa
Arkkitehtuuri x64, x86 php.net suosittelee x64:ää
Kääntäjä VS16, VS17 vaatii Visual C++ Redistributablen Visual Studiolle 2015–2022

PHP 8.5:lle php.net listasi 25.10.2026 tehdyssä haussa version 8.5.12 päivältä 21.10.2026, ZIP-arkistona kaikissa neljässä yhdistelmässä. Muut tuetut haarat valitsette samalta sivulta. Korjattuja ovat 8.5.12, 8.4.27, 8.3.36 ja 8.2.35. Versioille 8.1 ja vanhemmat ei ole enää virallisia päivityksiä.

PHP-päivitys Windowsissa: lataus tarkistettuna ja siisti vaihto

  1. Ladatkaa korjattu versio: php.netin Windows-lataussivulta, variantin ja arkkitehtuurin mukaan.
  2. Verratkaa tarkistussumma: php.net ilmoittaa jokaiselle arkistolle SHA-256-arvon. Jos se poikkeaa, älkää käyttäkö tiedostoa.
  3. Purkakaa uuteen kansioon: esimerkiksi C:\PHP\8.4.27, jotta vanha tila säilyy paluutienä.
  4. Siirtäkää konfiguraatio: kopioikaa aiempi php.ini ja verratkaa sitä uuteen php.ini-production-tiedostoon.
  5. Tarkistakaa laajennukset: Kolmansien osapuolten lisä-DLL-tiedostojen on sovittava versioon, varianttiin ja arkkitehtuuriin.
  6. Vaihtakaa polku: FastCGI-merkinnässä, Apachen LoadModule-rivillä tai ympäristömuuttujassa PATH.
  7. Käynnistäkää uudelleen ja tarkistakaa: Käynnistäkää verkkopalvelimen palvelu ja ajastetut tehtävät uudelleen ja tarkistakaa sitten versio ja käynnistysajat.
# Laske ladatun tiedoston SHA-256 ja vertaa php.netin arvoon
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Vaihdon jälkeen: ladatut laajennukset ja uuden asennuksen versio
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v

Jos PHP ei käynnisty vaihdon jälkeen tai ilmoittaa puuttuvasta DLL-tiedostosta, usein puuttuu sopivan arkkitehtuurin Visual C++ Redistributable tai jokin laajennus ei sovi uuteen versioon. Virhe paljastuu nopeimmin, kun kutsutte php.exe -v suoraan komentorivillä ennen kuin vaihdatte verkkopalvelimen asetukset. Mitä php.ini-tiedoston yksittäiset merkinnät tekevät, selittää php.ini selitettynä.

Apache Windowsissa: moduuliajo otettava vakavasti

Monet vanhemmat Windows-asennukset liittävät PHP:n suoraan Apacheen LoadModule-rivillä. Se on teknisesti sama asia kuin mod_php Linuxissa. PHP-tiimi arvioi PHP2Shellin riskin juuri siellä suurimmaksi, koska siinä on esitetty hyökkäys, joka toimii jo ennen kuin sovelluskoodia ajetaan. Taustat ovat sivulla Miksi mod_php on erityisen haavoittuva.

Mitä moduuleja Apache lataa, näyttää httpd.exe -M asennuksen bin-kansiossa; komento vain lukee. Jos siellä on PHP-moduuli, päivitys on etusijalla. Keskipitkällä aikavälillä kannattaa siirtyä PHP:hen FastCGI:n kautta NTS-buildillä, jotta PHP toimii omissa prosesseissaan. Se vaatii testin, koska konfiguraatio ja oikeudet muuttuvat.

Tärkeää

Tiedostojen vaihto ei vielä sulje aukkoa. Niin kauan kuin Apache-palvelu, IIS:n sovelluspoolit tai ajastetut tehtävät toimivat vanhalla versiolla, aukko pysyy auki. Tarkistakaa jokaisen prosessin käynnistysaika päivityksen jälkeen.

Päivityksen jälkeen: tarkistus ja jäljet

Kirjatkaa asennusta kohti polku, versio, variantti ja vaihdon päivämäärä. Poistakaa vanhat PHP-kansiot vasta, kun uusi tila toimii vakaasti, ja sitten todella, jotta niitä ei vahingossa oteta uudelleen käyttöön.

Päivitys ei poista haittaohjelmaa. Jos Windows-palvelin oli ennen korjausta tavoitettavissa internetistä, tarkistakaa verkkohakemistoista uudet skriptitiedostot, ajastetut tehtävät ja paikalliset tilit tuntemattomien varalta ja varmistakaa verkkopalvelimen lokit 20. lokakuuta alkaen. Mistä murron tunnistaa, kuvaa Olenko jo vaarantunut?.

Miten PHP SOS auttaa konkreettisesti?

  • Kaikkien asennusten löytäminen: Etsimme PHP:n Windows-järjestelmistänne, myös Apache-moduuleista, kehittäjäpaketeista ja erikoissovelluksista.
  • Vaihto ja todistus: PHP-päivityspalvelun kautta vaihdamme korjattuun versioon, tarkistamme tarkistussummat ja dokumentoimme version ja prosessin käynnistyksen.
  • Ajotavan parantaminen: Missä PHP toimii Apache-moduulina, suunnittelemme ja testaamme siirtymän FastCGI:hin.
  • Jälkien tarkistus: Varmistamme lokit ja tarkistamme järjestelmistä hyökkäykseen viittaavat merkit.

Usein kysytyt kysymykset

Päivittääkö Windows Update myös PHP:n?

Ei. PHP ei kuulu Windowsiin. Se tulee ZIP-arkistona php.netistä, osana pakettia kuten XAMPP tai erikoissovelluksen mukana, ja se on päivitettävä kulloinkin samaa tietä.

Tarvitsenko Thread Safe- vai Non-Thread-Safe-version?

php.netin mukaan NTS on tarkoitettu FastCGI:lle, esimerkiksi IIS:lle, ja komentorivikäyttöön. TS on tarkoitettu käyttöön moduulina verkkopalvelimessa, esimerkiksi Apachessa. Valitkaa päivityksessä sama variantti kuin tähän asti.

Miten tarkistan, että PHP-lataus on aito?

php.net ilmoittaa jokaiselle Windows-arkistolle SHA-256-tarkistussumman. PowerShellin Get-FileHash-komennolla lasketaan ladatun tiedoston tarkistussumma, ja molemmat arvot verrataan merkki merkiltä.

Käytän XAMPPia palvelimella. Mitä nyt?

XAMPP-tyyppiset paketit tuovat mukanaan oman PHP:nsä ja Apachensa, usein PHP Apache-moduulina. Tarkistakaa, tarjoaako projekti version korjatulla PHP:llä, ja siirtäkää asennus muuten ylläpidettyyn ratkaisuun. Tuotantokäyttöön tällaisia kehittäjäpaketteja ei muutenkaan ole tarkoitettu.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu