Amato o bistrattato, non si può negare che PHP sia uno dei linguaggi di programmazione più utilizzati al mondo, grazie soprattutto alla sua posizione dominante in ambito web. Infatti, per quanto gli sviluppatori più radical chic lo diano per morto da parecchi anni ormai, PHP resta il linguaggio di programmazione con cui sono realizzate 8 applicazioni web su 10! Non ci credete? Siete scettici? Approfondite l’argomento su W3Techs!
Tra i più celebri siti web realizzati in PHP possiamo annoverare: Facebook, Wikipedia, Vk, ovviamente WordPress.com, Pinterest, eccetera.
Se sei uno sviluppatore PHP sei quindi molto concentrato sul web e la tua attenzione viene spesso assorbita principalmente dagli aspetti di interazione con il navigatore: usabilità, velocità di esecuzione, responsività, ottimizzazione SEO e compagnia bella.
Un po’ meno attenzione riesci a mettere invece in tutto quel sottobosco di aspetti nascosti che riguardano la sicurezza del codice, questo non per tua negligenza ma per tutta una serie di fattori esterni che confluiscono in ragionamenti del tipo:
- uso solo prodotti Open Source, la manutenzione della sicurezza la lascio fare ai migliaia di programmatori che ci lavorano
- il sito del mio cliente lo vedranno in quattro gatti, perché dovrebbero cercare di attaccare proprio lui?
- ho realizzato solo un contact form di poche decine di codice e non ci sono errori, impossibile che possano sfondarlo o farci chissà che
- faccio sempre tutti gli aggiornamenti di WordPress, non potrà mai accadermi niente di grave!
Ovviamente di ragionamenti così potrei scriverne a centinaia, ma sono tutti completamente sbagliati: come qualsiasi altro linguaggio di programmazione PHP richiede molta attenzione dal punto di vista della sicurezza e benché sia un linguaggio solido e stabile le vulnerabilità sono create dagli sviluppatori stessi che mettono a disposizione del potenziale attaccante il pieno accesso a funzionalità e risorse che non dovrebbero mai finire nelle mani sbagliate.
Non dimentichiamo che anche un sito con pochissime visite può diventare un’arma nelle mani della persona giusta – o sbagliata – perché può potenzialmente consegnare le leve di comando dell’intero server se questo non è stato messo in sicurezza da un bravo sysadmin.
Vi presento quindi 5 strumenti facili da reperire e quasi altrettanto facili da utilizzare per individuare vulnerabilità o violazioni già avvenute nel vostro codice PHP – e per rendere la vita meno facile a chi va a spasso tra le pagine delle tue applicazioni web munito di intenzioni tutt’altro che buone…
- Exakat (https://www.exakat.io) – Si tratta di un tool di “analisi statica” dotato di una tra le più ampie librerie di pattern per individuare vulnerabilità in codice PHP: trappole puntuali, errori logici, regole di architettura, risorse inutilizzate, obsolescenza del codice e altro ancora. Interessante la presenza di analizzatori specifici per framework come WordPress, CakePHP, Zend, ecc.
- SonarPHP (https://www.sonarsource.com/products/codeanalyzers/sonarphp.html) – Altro ottimo analizzatore di codice statico, utilizza tecniche avanzate di pattern matching e analisi del flusso di dati per analizzare il codice e trovare bug e buchi di sicurezza. Si integra molto bene con Eclipse e IntelliJ.
- PMF (https://github.com/nbs-system/php-malware-finder/) – Scanner di malware da linea di comando molto potente e sempre aggiornassimo, permette di individuare la presenza di malware attraverso un’analisi statistica sulla struttura del codice sia da un punto di vista sintattico che semantico.
- PHP Vulnerability Scanner (https://www.autosectools.com/PHP-Vulnerability-Scanner) – Si tratta di un fuzzer di applicazioni Web avanzato che analizza diverse classi di vulnerabilità sia tramite analisi statiche che dinamiche. Può rivelare rapidamente le seguenti potenziali vulnerabilità: arbitrary command execution, arbitrary file read/write/change/rename/delete, local file inclusion, arbitrary PHP execution, SQL injection, user controlled function invocation, user controlled class instantiation, reflected cross-site scripting (XSS), open redirect e full path disclosure.
- Checkmarx (http://lp.checkmarx.com/php-code-analysis/) – Soluzione cloud per trovare vulnerabilità nel codice PHP e ottenere indicazioni su come risolverle. Ogni vulnerabilità viene spiegata in tutti i suoi aspetti, quindi ricorrere a questo vero e proprio servizio di consulenza è consigliabile quando non si è in grado di fare da soli, in questo modo si accresce anche il proprio know-how e si introducono best practice per non ripetere l’errore in futuro.
Come sempre, si tratta solo di una carrellata del tutto parziale e indicativa, ma serve per ricordare a tutti – compresi i miei collaboratori – che il benchmark di sicurezza sul codice PHP sviluppato in proprio o ereditato da terzi è sempre una fase fondamentale e importantissima nella realizzazione di un’applicazione web di qualità.