Situazione attuale: PHP2Shell. Due vulnerabilità critiche di PHP (CVSS 9,2) consentono codice dannoso senza autenticazione. Patch dal 21/10/2026.Che cosa fare ora →

Aggiornare PHP su Windows

Su Windows non esiste un aggiornamento automatico di PHP. Chi sceglie la variante giusta, verifica il download e riavvia tutti i processi porta la patch di PHP2Shell su ogni computer in modo pulito.

Stato 6 min di letturaHosting e distribuzioni

In breve: su Windows PHP si aggiorna a mano: scaricare da php.net la versione corretta, scegliere la stessa variante (Thread Safe o Non Thread Safe) e architettura, verificare il download con SHA-256, riprendere php.ini ed estensioni, cambiare il percorso e riavviare tutti i processi PHP. L'aggiornamento è particolarmente urgente se Apache su Windows carica PHP come modulo, perché il team PHP classifica questa modalità al livello più alto per PHP2Shell.

Dove si nasconde PHP sui computer Windows

I server Windows con PHP sono più frequenti di quanto molti pensino. Raramente è il grande sito, spesso sono intranet, applicazioni specializzate o strumenti che qualcuno ha configurato anni fa. L'esercizio con IIS è descritto in dettaglio nella pagina Mettere in sicurezza PHP su Windows e IIS. Questo articolo tratta l'aggiornamento stesso e i casi al di fuori di IIS.

I luoghi tipici sono Apache per Windows con PHP come modulo, pacchetti per sviluppatori come XAMPP, WampServer o Laragon finiti su un server, copie PHP proprie in applicazioni specializzate e script PHP in attività pianificate. I comandi PowerShell seguenti leggono soltanto e aiutano a trovarli:

# Trovare tutti i php.exe sull'unità C: (richiede un po' di tempo su unità grandi)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Quale php.exe si trova nel percorso di ricerca?
where.exe php

# Processi PHP e Apache in esecuzione con percorso e ora di avvio
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Versione e configurazione caricata di un'installazione (percorso come esempio)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini

Importante: se PHP gira come modulo Apache, non esiste un processo PHP a sé. PHP si trova allora nel processo httpd.exe. Chi cerca solo processi php-cgi trascura queste installazioni.

Si dimenticano facilmente anche le attività pianificate che richiamano script PHP, ad esempio per importazioni, report o riconciliazioni di dati. Usano spesso un proprio php.exe, più vecchio. Per PHP2Shell sono considerate meno esposte, perché la riga di comando, secondo le indicazioni finora fornite da php.net, non rientra tra le modalità di esecuzione interessate; nella sostituzione devono comunque puntare al nuovo percorso, altrimenti la vecchia installazione resta in uso e non viene mai rimossa.

# Attività pianificate che richiamano PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}

Un tema a sé sono i computer degli sviluppatori. XAMPP e pacchetti simili avviano Apache con PHP come modulo e sono spesso raggiungibili in tutta la rete aziendale. Anche lì il PHP va aggiornato, e il server web dovrebbe ascoltare solo sul proprio computer.

Thread Safe o Non Thread Safe: la variante giusta

php.net offre ogni versione per Windows in più varianti. Per la sostituzione vale: stessa variante e architettura di prima, altrimenti server web o estensioni non si caricano.

Caratteristica Opzioni Quando quale
Thread safety NTS (Non Thread Safe), TS (Thread Safe) secondo php.net NTS per FastCGI, ad esempio IIS, e riga di comando; TS per PHP come modulo in Apache
Architettura x64, x86 php.net raccomanda x64
Compilatore VS16, VS17 richiede Visual C++ Redistributable per Visual Studio dal 2015 al 2022

Per PHP 8.5, alla consultazione del 25 ottobre 2026 php.net elencava la versione 8.5.12 del 21 ottobre 2026, come archivio ZIP in tutte e quattro le combinazioni. Gli altri rami supportati li sceglie nella stessa pagina. Sono corrette 8.5.12, 8.4.27, 8.3.36 e 8.2.35. Per 8.1 e precedenti non esistono più aggiornamenti ufficiali.

Aggiornare PHP su Windows: verificare il download e sostituire in modo pulito

  1. Scaricare la versione corretta: dalla pagina di download per Windows su php.net, adatta a variante e architettura.
  2. Confrontare la somma di controllo: php.net indica per ogni archivio un valore SHA-256. Se differisce, non usi il file.
  3. Estrarre in una nuova cartella: ad esempio C:\PHP\8.4.27, così il vecchio stato resta come via di ritorno.
  4. Riprendere la configurazione: copiare il php.ini esistente e confrontarlo con il nuovo php.ini-production.
  5. Verificare le estensioni: i file DLL aggiuntivi di terzi devono corrispondere a versione, variante e architettura.
  6. Cambiare il percorso: nella voce FastCGI, nella riga LoadModule di Apache o nella variabile d'ambiente PATH.
  7. Riavviare e verificare: riavviare il servizio del server web e le attività pianificate, poi controllare versione e ore di avvio.
# Calcolare lo SHA-256 del file scaricato e confrontarlo con php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Dopo il cambio: estensioni caricate e versione della nuova installazione
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v

Se PHP non parte dopo il cambio o segnala una DLL mancante, spesso manca il Visual C++ Redistributable nell'architettura adatta, oppure un'estensione non corrisponde alla nuova versione. L'errore emerge più in fretta se richiama php.exe -v direttamente nella riga di comando prima di passare il server web. Cosa facciano le singole voci di php.ini lo spiega php.ini spiegato.

Apache su Windows: prendere sul serio la modalità modulo

Molte installazioni Windows più vecchie integrano PHP direttamente in Apache tramite una riga LoadModule. Tecnicamente è la stessa cosa di mod_php su Linux. Il team PHP classifica il rischio di PHP2Shell proprio lì al livello più alto, perché è stato dimostrato un exploit prima ancora che giri del codice dell'applicazione. Il contesto è in Perché mod_php è particolarmente esposto.

Quali moduli carichi un Apache lo mostra httpd.exe -M nella cartella bin dell'installazione; il comando legge soltanto. Se compare un modulo PHP, l'aggiornamento ha la precedenza. A medio termine vale la pena passare a PHP tramite FastCGI con build NTS, perché PHP giri in processi propri. Ciò richiede un test, perché cambiano configurazione e permessi.

Importante

La sostituzione dei file non chiude ancora la vulnerabilità. Finché il servizio Apache, i pool di applicazioni IIS o le attività pianificate girano con la vecchia versione, la vulnerabilità resta aperta. Dopo l'aggiornamento verifichi l'ora di avvio di ogni processo.

Dopo l'aggiornamento: controllo e tracce

Annoti per ogni installazione percorso, versione, variante e data del cambio. Rimuova le vecchie cartelle PHP solo quando il nuovo stato gira in modo stabile, e poi davvero, perché non vengano reintegrate per errore.

Un aggiornamento non rimuove il software dannoso. Se un server Windows nei giorni prima della patch era raggiungibile da Internet, verifichi nelle directory web la presenza di nuovi file di script, nelle attività pianificate e negli account locali la presenza di elementi sconosciuti e conservi i log del server web a partire dal 20 ottobre. Da cosa riconoscere un'intrusione lo descrive Sono già compromesso?.

Come aiuta concretamente PHP SOS?

  • Trovare tutte le installazioni: cerchiamo PHP sui Suoi sistemi Windows, anche in moduli Apache, pacchetti per sviluppatori e applicazioni specializzate.
  • Sostituire e documentare: con il servizio di patch PHP passiamo alla versione corretta, verifichiamo le somme di controllo e documentiamo versione e avvio dei processi.
  • Migliorare la modalità di esecuzione: dove PHP gira come modulo Apache, pianifichiamo e testiamo il passaggio a FastCGI.
  • Verificare le tracce: conserviamo i log e verifichiamo nei sistemi la presenza di indizi di un attacco.

Domande frequenti

Windows Update aggiorna anche PHP?

No. PHP non fa parte di Windows. Arriva come archivio ZIP da php.net, come parte di un pacchetto come XAMPP o con un'applicazione specializzata e deve essere aggiornato di volta in volta per quella via.

Mi serve la versione Thread Safe o Non Thread Safe?

Secondo php.net NTS è pensata per FastCGI, quindi ad esempio per IIS, e per la riga di comando. TS è pensata per l'esercizio come modulo nel server web, ad esempio in Apache. Con l'aggiornamento scelga la stessa variante di prima.

Come verifico che il download di PHP sia autentico?

php.net indica per ogni archivio Windows una somma di controllo SHA-256. Con Get-FileHash in PowerShell calcola la somma di controllo del file scaricato e confronta i due valori carattere per carattere.

Uso XAMPP su un server. Che fare ora?

Pacchetti come XAMPP portano con sé il proprio PHP e Apache, spesso con PHP come modulo Apache. Verifichi se il progetto offra una versione con PHP corretto e, altrimenti, porti l'installazione su una soluzione curata. Per l'esercizio produttivo tali pacchetti per sviluppatori non sono comunque pensati.

Fonti

Contatto immediato

Ogni ora conta. Ci scriva adesso.

Descriva brevemente sistema, versione di PHP e quanto osservato. Ci faremo sentire, chiariremo la situazione e lavoreremo da remoto fino alla chiusura e alla documentazione dell'incidente.

Aiuto immediato