Le vulnerabilità PHP sono debolezze nel runtime PHP, nel codice dell'applicazione, nei pacchetti di terze parti o nella configurazione del server che possono esporre un sito web ad accessi non autorizzati, furto di dati o interruzioni. Esempi comuni includono SQL injection, cross-site scripting, upload di file non sicuri e controlli di accesso interrotti.
La distinzione è importante perché le correzioni sono diverse. Un difetto di sicurezza del runtime richiede una build PHP patchata. Un bug di autorizzazione richiede una modifica al codice o alla policy. Aggiornare PHP è essenziale, ma non riparerà automaticamente ogni debolezza in un sito web costruito con esso.
Per i servizi di criptovalute, la posta in gioco può includere i controlli di prelievo, le credenziali API e i dettagli delle transazioni mostrati agli utenti del wallet. Un sito web compromesso non significa che le regole di consenso di Bitcoin o la crittografia di una blockchain siano state violate.

Inizia Con Software Supportato e Patchato
Aggiornamento di sicurezza, 22 ottobre 2026: L'avviso di PHP del 21 ottobre ha identificato due vulnerabilità critiche di esecuzione remota di codice, CVE-2026-109618 e CVE-2026-109619. Le release corrette per i branch supportati sono state PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35. Il team PHP ha esortato gli utenti ad aggiornare; le mitigazioni temporanee non sostituiscono completamente la patch. Controlla l'annuncio ufficiale di sicurezza e la guida del tuo provider di hosting.
Utilizza la release corretta applicabile o una versione stabile patchata successiva. I fornitori di distribuzione possono backportare le correzioni di sicurezza, quindi verifica lo stato di avviso del pacchetto piuttosto che giudicare solo la sua stringa di versione. Conferma che il runtime web server, non solo PHP da riga di comando, sia stato aggiornato e che i worker pertinenti siano stati riavviati.
Mantieni anche un piano di aggiornamento. Il supporto di sicurezza upstream di PHP 8.2 termina il 31 dicembre 2026; ricevere questa particolare patch non estende il suo normale ciclo di vita di supporto.
SQL Injection: Tieni i Dati Fuori dalla Struttura della Query
L'SQL injection si verifica quando input non attendibili diventano parte di un comando di database. La correzione principale è associare i valori dei dati tramite istruzioni preparate piuttosto che unire l'input dell'utente alle stringhe SQL. La documentazione PDO di PHP spiega la separazione.
Ad esempio, un recupero di articoli privati può associare sia un ID articolo validato che l'identità del server dell'utente autenticato:
$stmt = $pdo->prepare(
'SELECT id, title FROM articles
WHERE id = :id AND owner_id = :owner'
);
$stmt->execute([
'id' => $articleId,
'owner' => $authenticatedUserId,
]);
I segnaposto proteggono i valori dei dati, non nomi di tabella arbitrari, nomi di colonna o direzioni di ordinamento. Mappa queste scelte a valori fissi e consentiti. Limita anche i privilegi del database: l'applicazione raramente necessita di un account che possa amministrare l'intero database.
Cross-Site Scripting: Codifica per il Contesto di Output
Il cross-site scripting, o XSS, si verifica quando contenuti non attendibili vengono interpretati come contenuti eseguibili del browser. Un commento, un campo del profilo o un documento importato possono diventare pericolosi quando una pagina li renderizza in modo errato.
Utilizza l'escape automatico del tuo framework e tieni i dati non attendibili fuori dai contesti eseguibili. Per il testo semplice inserito tra tag HTML ordinari, htmlspecialchars() di PHP con gestione esplicita di UTF-8 è uno strumento appropriato. Non è una soluzione universale per JavaScript, CSS o URL.
Se gli utenti devono inviare HTML ricco, utilizza un sanitizer HTML mantenuto e basato su whitelist piuttosto che trattare l'intero input come attendibile. Una Content Security Policy aggiunge un altro livello; non sostituisce la corretta gestione del contenuto. Queste distinzioni sono trattate nella guida alla prevenzione XSS di OWASP.
Upload e Gestione File: Controlla Cosa Accetta il Server
Una funzionalità di upload non dovrebbe permettere a un utente di decidere quale file eseguibile appare sul server. Consenti solo i tipi di file necessari al prodotto, controlla il contenuto piuttosto che fidarti del tipo MIME dichiarato dal browser, imposta limiti di dimensione e genera nomi di file lato server.
Archivia gli upload non attendibili al di fuori della web root o su storage separato, con recupero controllato. Assicurati che la configurazione di serving non possa eseguire contenuti caricati. Autenticazione, autorizzazione e ispezione appropriata di malware o contenuti forniscono ulteriori salvaguardie. La guida agli upload di file di OWASP raccomanda di combinare questi controlli.
Applica la stessa disciplina ai percorsi dei file e agli import. Mappa gli ID dei documenti visibili all'utente a file server approvati invece di passare valori di richiesta grezzi alle funzioni di inclusione di file. Evita di alimentare input non attendibili in comandi shell, o deserializzazione di oggetti PHP. API più sicure e formati di dati validati riducono la necessità di queste operazioni pericolose.
Autenticazione, Sessioni e CSRF Richiedono Controlli Separati
L'autenticazione stabilisce chi è un utente; l'autorizzazione decide cosa quell'utente può fare. Una pagina di login funzionante non prova che i record dell'account, i download o le azioni amministrative siano protetti. Controlla i permessi sul server per ogni operazione e oggetto sensibile.
Utilizza funzioni consolidate per la gestione delle password come password_hash() e password_verify(), proteggi gli account privilegiati con MFA e limita i tentativi di login abusivi. Per le sessioni, applica HTTPS, configura attributi cookie Secure, HttpOnly e SameSite appropriati, rinnova gli identificatori di sessione dopo l'autenticazione o le modifiche ai privilegi e invalida le sessioni al logout. Segui la guida alla gestione delle sessioni di OWASP piuttosto che inventare uno schema di sessione personalizzato.
Le richieste che modificano lo stato e autenticate tramite cookie richiedono anche protezione CSRF. Preferisci l'implementazione mantenuta dal framework, inclusa la validazione del token lato server ove applicabile. I cookie SameSite sono una difesa utile in profondità, ma non dovrebbero essere considerati protettivi per ogni distribuzione o flusso di richieste. Non utilizzare richieste GET per eseguire modifiche di stato sensibili.
Configurazione e Dipendenze Fanno Parte dell'Applicazione
Un controller ben scritto può trovarsi all'interno di una distribuzione non sicura. Tieni credenziali, chiavi private, segreti di configurazione e backup fuori dalle directory pubbliche. Disabilita la visualizzazione dettagliata degli errori in produzione, mantenendo al contempo log accessibili tramite controllo per aiutare a indagare sui fallimenti senza raccogliere segreti non necessari.
Rivedi l'inventario completo delle dipendenze: il runtime PHP, le estensioni, il framework, il CMS, i plugin e i pacchetti Composer. Il comando audit di Composer può identificare problemi di sicurezza segnalati nelle dipendenze, ma non può certificare che la logica dell'applicazione personalizzata sia sicura.
Testa gli aggiornamenti rispetto all'applicazione e distribuisci in modo riproducibile da versioni di dipendenze revisionate. Rimuovi i componenti non utilizzati piuttosto che lasciarli esposti indefinitamente. Limita i permessi del filesystem in modo che un processo applicativo non possa riscrivere tutto sul server e separa gli strumenti di sviluppo dalla produzione.
Come le Vulnerabilità PHP Possono Influenzare i Siti Web Crypto

Il livello applicativo di un sito web crypto può essere attaccato separatamente dalla blockchain a cui si connette. I seguenti sono scenari di rischio architetturale, non risultati su scambi o wallet nominati.
| Rischio Crypto | Cosa può andare storto | Controllo pratico |
|---|---|---|
| Abuso di account custodial o di prelievo | Sessioni dirottate o autorizzazione lato server debole | Riautentica azioni sensibili e lega l'approvazione al destinatario e all'importo esatti. |
| Inganno sull'indirizzo di deposito o sulla firma | Contenuto della pagina web alterato o descrizioni delle transazioni fuorvianti | Verifica la rete, il destinatario, l'asset e l'importo in un'interfaccia wallet attendibile o in un display hardware-wallet leggibile. |
| Esposizione delle credenziali API | Segreti trapelati tramite codice, log o file pubblici | Mantieni le chiavi lato server, limita l'ambito dei permessi, ometti i diritti di prelievo quando non necessari e ruota le credenziali esposte. |
Proteggere una chiave privata non protegge automaticamente la decisione di usarla. La guida al clear-signing di Trezor spiega perché un frontend compromesso può descrivere erroneamente una transazione. Non approvare richieste che non puoi verificare in modo significativo, o inserire una seed phrase in un sito web che afferma di aver bisogno di un aggiornamento di sicurezza.
Applica la patch o la modifica del codice pertinente, quindi testa sia il controllo di sicurezza che il normale comportamento dell'utente. Includi test negativi: un utente non dovrebbe accedere al record di qualcun altro semplicemente modificando un identificatore. Esegui test di sicurezza solo su sistemi di tua proprietà o che sei esplicitamente autorizzato a valutare.
Se si sospetta un compromesso, la patch è solo una parte del recupero. Contieni l'incidente, conserva le prove utili, indaga sulla persistenza e sulle credenziali esposte e ripristina da uno stato pulito verificato. Una regola del firewall o un risultato di scanner pulito non stabiliscono che l'accesso di un aggressore sia stato rimosso.
Domande Frequenti
PHP è intrinsecamente insicuro?
No. Il rischio dipende dalla versione del runtime, dal design dell'applicazione, dalle dipendenze e dalla distribuzione. Le applicazioni PHP richiedono comunque una manutenzione di sicurezza di routine.
L'aggiornamento di PHP correggerà SQL injection e XSS?
Non necessariamente. Gli aggiornamenti del runtime correggono le vulnerabilità del runtime; la costruzione di query non sicura e la gestione dell'output generalmente richiedono modifiche all'applicazione.
HTTPS previene le vulnerabilità PHP?
No. HTTPS protegge i dati in transito. Non corregge permessi errati, upload non sicuri o codice lato server vulnerabile.
Un web application firewall può sostituire il patching?
No. Può ridurre alcune esposizioni, ma non può riparare in modo affidabile il difetto software sottostante o la logica dell'applicazione.
Conclusione
Le vulnerabilità PHP non hanno un'unica soluzione universale. Patcha il runtime e le dipendenze, tieni i valori del database separati da SQL, gestisci l'output del browser in modo sicuro, limita gli upload e applica controlli di accesso lato server.
Per le applicazioni crypto, proteggi anche l'autorizzazione dei prelievi, le credenziali API e i dettagli delle transazioni rivolti al wallet. Abbina ogni debolezza al controllo giusto e verifica quel controllo dopo la distribuzione. Aggiornamenti, codifica sicura e monitoraggio operativo lavorano insieme; nessuno sostituisce gli altri.

