Накратко: Под Windows PHP се актуализира на ръка: изтеглете отстранената версия от php.net, изберете същия вариант (Thread Safe или Non Thread Safe) и същата архитектура, проверете изтеглянето по SHA-256, пренесете php.ini и разширенията, сменете пътя и рестартирайте всички PHP процеси. Актуализацията е особено спешна, ако Apache под Windows зарежда PHP като модул, защото този режим на работа екипът на PHP оценява при PHP2Shell най-високо.
Къде всъщност стои PHP на компютри с Windows
Windows сървъри с PHP има по-често, отколкото мнозина мислят. Рядко това е големият уебсайт, често са интранети, специализирани приложения или инструменти, които някой е настроил преди години. Работата под IIS е описана подробно на страницата Защита на PHP под Windows и IIS. Тази статия разглежда самата актуализация и случаите извън IIS.
Типични места са Apache за Windows с PHP като модул, пакети за разработчици като XAMPP, WampServer или Laragon, попаднали на сървър, собствени копия на PHP в специализирани приложения и PHP скриптове в планирани задачи. Следните PowerShell команди само четат и помагат при намирането:
# Намиране на всички php.exe на устройство C: (на големи устройства отнема известно време)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Кой php.exe е в пътя за търсене?
where.exe php
# Работещи PHP и Apache процеси с път и време на стартиране
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Версия и заредена конфигурация на една инсталация (пътят е пример)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Важно: Ако PHP работи като Apache модул, няма собствен PHP процес. PHP стои тогава в процеса httpd.exe. Който търси само процеси php-cgi, пропуска тези инсталации.
Лесно се забравят и планираните задачи, които извикват PHP скриптове, например за импорти, отчети или съпоставяне на данни. Те често ползват собствен, по-стар php.exe. За PHP2Shell те се считат за по-малко застрашени, защото командният ред според досегашните данни на php.net не спада към засегнатите режими на работа; при подмяната те все пак трябва да сочат към новия път, иначе старата инсталация остава в употреба и никога не се премахва.
# Планирани задачи, които извикват PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Отделна тема са компютрите на разработчиците. XAMPP и подобни пакети стартират Apache с PHP като модул и често са достъпни в цялата фирмена мрежа. И там PHP трябва да се актуализира, а уеб сървърът трябва да слуша само на собствения компютър.
Thread Safe или Non Thread Safe: правилният вариант
php.net предлага всяка версия за Windows в няколко варианта. За подмяната важи: същият вариант и същата архитектура като досега, иначе уеб сървърът или разширенията не се зареждат.
| Признак | Опции | Кога коя |
|---|---|---|
| Безопасност на нишките | NTS (Non Thread Safe), TS (Thread Safe) | според php.net NTS за FastCGI, например IIS, и за командния ред; TS за PHP като модул в Apache |
| Архитектура | x64, x86 | php.net препоръчва x64 |
| Компилатор | VS16, VS17 | изисква Visual C++ Redistributable за Visual Studio 2015 до 2022 |
За PHP 8.5 php.net при справката на 25.10.2026 г. изброяваше версия 8.5.12 от 21.10.2026 г., като ZIP архив във всички четири комбинации. Останалите поддържани клонове избирате на същата страница. Отстранени са 8.5.12, 8.4.27, 8.3.36 и 8.2.35. За 8.1 и по-стари няма официални актуализации.
Актуализация на PHP под Windows: проверка на изтеглянето и чиста подмяна
- Изтеглете отстранената версия: от страницата за изтегляне за Windows на php.net, според варианта и архитектурата.
- Сравнете контролната сума: php.net посочва за всеки архив стойност SHA-256. Ако се различава, не използвайте файла.
- Разархивирайте в нова папка: например
C:\PHP\8.4.27, така че старото състояние да остане като път назад. - Пренесете конфигурацията: копирайте досегашния
php.iniи го сравнете с новияphp.ini-production. - Проверете разширенията: Допълнителните DLL файлове на външни доставчици трябва да съответстват на версията, варианта и архитектурата.
- Сменете пътя: във FastCGI записа, в реда
LoadModuleна Apache или в променливата на средатаPATH. - Рестартирайте и проверете: Рестартирайте услугата на уеб сървъра и планираните задачи, после проверете версията и времената на стартиране.
# Изчисляване на SHA-256 на изтегления файл и сравняване с php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# След смяната: заредени разширения и версия на новата инсталация
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Ако PHP не стартира след смяната или съобщава за липсващ DLL, често липсва Visual C++ Redistributable в подходящата архитектура или някое разширение не отговаря на новата версия. Грешката се показва най-бързо, ако извикате php.exe -v директно в командния ред, преди да превключите уеб сървъра. Какво правят отделните записи в php.ini, обяснява php.ini обяснен.
Apache под Windows: вземете модулния режим на сериозно
Много по-стари инсталации под Windows вграждат PHP директно в Apache чрез ред LoadModule. Технически това е същото като mod_php под Linux. Екипът на PHP оценява риска от PHP2Shell точно там като най-висок, защото е показан експлойт, преди изобщо да се изпълни код на приложението. Контекста има в Защо mod_php е особено застрашен.
Кои модули зарежда един Apache, показва httpd.exe -M в папката bin на инсталацията; командата само чете. Ако там стои PHP модул, актуализацията има приоритет. Средносрочно си заслужава преминаване към PHP през FastCGI с NTS build, за да работи PHP в собствени процеси. Това изисква тест, защото се променят конфигурацията и правата.
Подмяната на файловете още не затваря уязвимостта. Докато услугата на Apache, пуловете на приложенията в IIS или планираните задачи работят със старата версия, уязвимостта остава отворена. Проверете времето на стартиране на всеки процес след актуализацията.
След актуализацията: контрол и следи
Отбележете за всяка инсталация път, версия, вариант и дата на смяната. Премахнете старите PHP папки едва когато новото състояние работи стабилно, и тогава наистина, за да не бъдат случайно включени отново.
Актуализацията не премахва злонамерен софтуер. Ако Windows сървър е бил достъпен от интернет в дните преди пача, проверете уеб директориите за нови скриптови файлове, планираните задачи и локалните акаунти за непознато и запазете протоколите на уеб сървъра от 20 октомври. По какво се разпознава проникване, описва Компрометиран ли съм вече?.
Как помага PHP SOS конкретно?
- Намиране на всички инсталации: Търсим PHP на Вашите Windows системи, и в Apache модули, пакети за разработчици и специализирани приложения.
- Подмяна и доказване: Чрез PHP Patch Service преминаваме към отстранената версия, проверяваме контролните суми и документираме версията и стартирането на процесите.
- Подобряване на режима на работа: Където PHP работи като Apache модул, планираме и тестваме преминаването към FastCGI.
- Проверка на следите: Запазваме протоколите и проверяваме системите за признаци на нападение.
Често задавани въпроси
Актуализира ли Windows Update и PHP?
Не. PHP не е част от Windows. Той идва като ZIP архив от php.net, като част от пакет като XAMPP или със специализирано приложение и трябва да се актуализира по съответния път.
Трябва ли ми Thread-Safe или Non-Thread-Safe версията?
Според php.net NTS е предвидена за FastCGI, тоест например за IIS, и за командния ред. TS е предвидена за работа като модул в уеб сървъра, например в Apache. При актуализацията вземете същия вариант като досега.
Как да проверя дали изтеглянето на PHP е автентично?
php.net посочва за всеки архив за Windows контролна сума SHA-256. С Get-FileHash в PowerShell изчислявате контролната сума на изтегления файл и сравнявате двете стойности знак по знак.
Ползвам XAMPP на сървър. Какво сега?
Пакети като XAMPP носят собствен PHP и Apache, често с PHP като Apache модул. Проверете дали проектът предлага версия с отстранен PHP, а иначе превключете инсталацията към поддържано решение. За продуктивна работа такива пакети за разработчици така или иначе не са предвидени.