Aktualna sytuacja: PHP2Shell. Dwie krytyczne luki w PHP (CVSS 9,2) umożliwiają wykonanie złośliwego kodu bez logowania. Poprawki od 21.10.2026.Co należy teraz zrobić →

Aktualizacja PHP w systemie Windows

W Windows nie ma automatycznej aktualizacji PHP. Kto wybierze właściwy wariant, sprawdzi pobrany plik i zrestartuje wszystkie procesy, czysto wprowadzi poprawkę PHP2Shell na każdym komputerze.

Stan 5 min czytaniaHosting i dystrybucje

Krótko: W Windows PHP aktualizuje się ręcznie: pobrać poprawioną wersję z php.net, wybrać ten sam wariant (Thread Safe lub Non Thread Safe) i architekturę, sprawdzić pobrany plik przez SHA-256, przejąć php.ini i rozszerzenia, przestawić ścieżkę i zrestartować wszystkie procesy PHP. Aktualizacja jest szczególnie pilna, gdy Apache w Windows ładuje PHP jako moduł, ponieważ ten tryb pracy zespół PHP ocenia przy PHP2Shell najwyżej.

Gdzie wszędzie tkwi PHP na komputerach z Windows

Serwerów Windows z PHP jest więcej, niż wielu myśli. Rzadko jest to duża strona, często intranety, aplikacje specjalistyczne lub narzędzia, które ktoś skonfigurował lata temu. Pracę pod IIS szczegółowo opisuje strona Zabezpieczanie PHP w Windows i IIS. Ten artykuł dotyczy samej aktualizacji i przypadków poza IIS.

Typowe miejsca to Apache dla Windows z PHP jako modułem, pakiety dla programistów, takie jak XAMPP, WampServer czy Laragon, które trafiły na serwer, własne kopie PHP w aplikacjach specjalistycznych oraz skrypty PHP w zaplanowanych zadaniach. Poniższe polecenia PowerShell tylko odczytują dane i pomagają w znalezieniu:

# Znaleźć wszystkie php.exe na dysku C: (na dużych dyskach trwa chwilę)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Która php.exe leży w ścieżce wyszukiwania?
where.exe php

# Działające procesy PHP i Apache ze ścieżką i czasem startu
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Wersja i załadowana konfiguracja instalacji (ścieżka jako przykład)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini

Ważne: jeśli PHP działa jako moduł Apache, nie ma osobnego procesu PHP. PHP tkwi wtedy w procesie httpd.exe. Kto szuka tylko procesów php-cgi, przeoczy te instalacje.

Łatwo zapomina się także o zaplanowanych zadaniach wywołujących skrypty PHP, na przykład dla importów, raportów czy uzgadniania danych. Często używają własnej, starszej php.exe. Dla PHP2Shell uchodzą za mniej zagrożone, ponieważ wiersz poleceń według dotychczasowych informacji php.net nie należy do dotkniętych trybów pracy; przy wymianie muszą jednak wskazywać na nową ścieżkę, w przeciwnym razie stara instalacja pozostaje w użyciu i nigdy nie zostanie usunięta.

# Zaplanowane zadania wywołujące PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}

Osobnym tematem są komputery programistów. XAMPP i podobne pakiety uruchamiają Apache z PHP jako modułem i często są osiągalne w całej sieci firmowej. Także tam PHP należy zaktualizować, a serwer WWW powinien nasłuchiwać tylko na własnym komputerze.

Thread Safe czy Non Thread Safe: właściwy wariant

php.net oferuje każdą wersję dla Windows w kilku wariantach. Przy wymianie obowiązuje: ten sam wariant i architektura co dotychczas, w przeciwnym razie serwer WWW lub rozszerzenia się nie załadują.

Cecha Opcje Kiedy który
Bezpieczeństwo wątków NTS (Non Thread Safe), TS (Thread Safe) według php.net NTS dla FastCGI, np. IIS, i wiersza poleceń; TS dla PHP jako modułu w Apache
Architektura x64, x86 php.net zaleca x64
Kompilator VS16, VS17 wymaga Visual C++ Redistributable dla Visual Studio 2015 do 2022

Dla PHP 8.5 php.net wymieniał przy sprawdzeniu 25.10.2026 wersję 8.5.12 z 21.10.2026, jako archiwum ZIP we wszystkich czterech kombinacjach. Pozostałe wspierane gałęzie wybierają Państwo na tej samej stronie. Poprawione są 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Dla 8.1 i starszych nie ma już oficjalnych aktualizacji.

Aktualizacja PHP w Windows: sprawdzenie pobrania i czysta wymiana

  1. Pobrać poprawioną wersję: ze strony pobierania dla Windows na php.net, odpowiednio do wariantu i architektury.
  2. Porównać sumę kontrolną: php.net podaje dla każdego archiwum wartość SHA-256. Jeśli się różni, nie wolno używać pliku.
  3. Rozpakować do nowego folderu: na przykład C:\PHP\8.4.27, aby stary stan pozostał jako droga powrotu.
  4. Przejąć konfigurację: skopiować dotychczasowy php.ini i porównać z nowym php.ini-production.
  5. Sprawdzić rozszerzenia: Dodatkowe pliki DLL od zewnętrznych dostawców muszą pasować do wersji, wariantu i architektury.
  6. Przestawić ścieżkę: we wpisie FastCGI, w wierszu LoadModule Apache lub w zmiennej środowiskowej PATH.
  7. Zrestartować i sprawdzić: zrestartować usługę serwera WWW i zaplanowane zadania, potem skontrolować wersję i czasy startu.
# Obliczyć SHA-256 pobranego pliku i porównać z php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Po zmianie: załadowane rozszerzenia i wersja nowej instalacji
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v

Jeśli PHP po zmianie nie startuje lub zgłasza brakującą bibliotekę DLL, często brakuje Visual C++ Redistributable w odpowiedniej architekturze albo rozszerzenie nie pasuje do nowej wersji. Błąd najszybciej widać, gdy wywołają Państwo php.exe -v bezpośrednio w wierszu poleceń, zanim przestawią serwer WWW. Co oznaczają poszczególne wpisy php.ini, wyjaśnia php.ini wyjaśnione.

Apache w Windows: poważnie traktować pracę w trybie modułu

Wiele starszych instalacji Windows wiąże PHP przez wiersz LoadModule bezpośrednio z Apache. Technicznie to to samo co mod_php w Linuxie. Zespół PHP ocenia ryzyko PHP2Shell właśnie tam najwyżej, ponieważ pokazano exploit, zanim w ogóle zacznie działać kod aplikacji. Tło znajdą Państwo w Dlaczego mod_php jest szczególnie zagrożony.

To, jakie moduły ładuje Apache, pokazuje httpd.exe -M w folderze bin instalacji; polecenie tylko odczytuje. Jeśli stoi tam moduł PHP, aktualizacja ma pierwszeństwo. Średnioterminowo opłaca się przejście na PHP przez FastCGI z buildem NTS, aby PHP działało w osobnych procesach. Wymaga to testu, ponieważ zmieniają się konfiguracja i uprawnienia.

Ważne

Sama wymiana plików jeszcze nie zamyka luki. Dopóki usługa Apache, pule aplikacji IIS lub zaplanowane zadania działają ze starą wersją, luka pozostaje otwarta. Po aktualizacji proszę sprawdzić czas startu każdego procesu.

Po aktualizacji: kontrola i ślady

Dla każdej instalacji proszę zanotować ścieżkę, wersję, wariant i datę zmiany. Stare foldery PHP należy usunąć dopiero wtedy, gdy nowy stan działa stabilnie, i wtedy naprawdę, aby nie zostały przypadkowo ponownie włączone.

Aktualizacja nie usuwa szkodliwego oprogramowania. Jeśli serwer Windows był w dniach przed poprawką osiągalny z internetu, proszę sprawdzić katalogi WWW pod kątem nowych plików skryptów, zaplanowane zadania i konta lokalne pod kątem nieznanych wpisów oraz zabezpieczyć protokoły serwera WWW od 20 października. Po czym poznać włamanie, opisuje Czy już zostałem skompromitowany?.

Jak konkretnie pomaga PHP SOS?

  • Znaleźć wszystkie instalacje: Szukamy PHP na Państwa systemach Windows, także w modułach Apache, pakietach dla programistów i aplikacjach specjalistycznych.
  • Wymienić i udokumentować: W ramach usługi PHP-Patch-Service przechodzimy na poprawioną wersję, sprawdzamy sumy kontrolne i dokumentujemy wersję oraz start procesów.
  • Poprawić tryb pracy: Tam, gdzie PHP działa jako moduł Apache, planujemy i testujemy przejście na FastCGI.
  • Sprawdzić ślady: Zabezpieczamy protokoły i sprawdzamy systemy pod kątem wskazówek ataku.

Częste pytania

Czy Windows Update aktualizuje także PHP?

Nie. PHP nie należy do Windows. Pochodzi jako archiwum ZIP z php.net, jako część pakietu takiego jak XAMPP lub razem z aplikacją specjalistyczną i trzeba je aktualizować tą samą drogą.

Czy potrzebuję wersji Thread Safe, czy Non Thread Safe?

Według php.net NTS jest przeznaczona dla FastCGI, czyli na przykład dla IIS, oraz dla wiersza poleceń. TS jest przeznaczona do pracy jako moduł w serwerze WWW, na przykład w Apache. Przy aktualizacji proszę wybrać ten sam wariant co dotychczas.

Jak sprawdzić, czy pobrany plik PHP jest autentyczny?

php.net podaje dla każdego archiwum Windows sumę kontrolną SHA-256. Poleceniem Get-FileHash w PowerShell obliczają Państwo sumę kontrolną pobranego pliku i porównują obie wartości znak po znaku.

Używam XAMPP na serwerze. Co teraz?

Pakiety takie jak XAMPP mają własne PHP i Apache, często z PHP jako modułem Apache. Proszę sprawdzić, czy projekt oferuje wersję z poprawionym PHP, a w przeciwnym razie przestawić instalację na utrzymywane rozwiązanie. Do pracy produkcyjnej takie pakiety dla programistów i tak nie są przeznaczone.

Źródła

Kontakt natychmiast

Liczy się każda godzina. Proszę napisać do nas teraz.

Proszę krótko opisać system, wersję PHP i obserwacje. Skontaktujemy się z Państwem, ustalimy sytuację i będziemy pracować zdalnie, aż incydent zostanie zamknięty i udokumentowany.

Natychmiastowa pomoc