Galateo della sicurezza: validazione dei dati e protezione del filesystem
15
giu
2009
Descrivere le buone abitudini richieste ad uno sviluppatore PHP vuol dire prima di tutto imparare a comprendere concetti di sicurezza remota e locale. Infatti, al di là della sicurezza (indispensabile) di piattaforma e sistema operativo, un buon sviluppatore deve considerare sempre con attenzione la sicurezza del codice che scrive. Vogliamo cominciare questa raccolta di “buoni consigli” con la validazione dei dati e l’accesso al filesystem
- Validare sempre i dati!
La regola è non fidarsi degli utenti: laddove l’utente può interagire con l’applicativo (è il caso, ad esempio, di form), questi ha la possibilità di inserire codice potenzialmente dannoso per l’applicativo stesso. Lo sviluppatore ha il dovere di salvaguardare sempre le proprie applicazioni da codice dannoso. Anche se l’utilizzo di framework di ultima generazione (come Codeigniter), permette una riduzione dei rischi, è sempre bene in ogni caso pensare a tutto ciò che l’utente potrebbe fare con il nostro applicativo. A tale scopo consigliamo:
- di utilizzare, dove possibile, una “white list”, ovvero una lista di valori validi (meglio considerare l’insieme dei valori validi piuttosto che l’insieme dei valori non validi: tra questi, infatti, ci possono essere dei valori sconosciuti o inattesi!)
- di validare pochi dati per volta (mai, ad esempio, username e password insieme!)
- di utilizzare i caratteri di escape per le virgolette
- di validare, dove possibile, il tipo di dato atteso (numero naturale, numero reale, carattere alfanumerico, etc…)
- Proteggere il file system
Qualora fosse necessario far scaricare ad un utente un file dal sito internet realizzato in php, molti passano il nome del file attraverso l’url: attenzione! Un utente male intenzionato potrebbe, sostituendo il nome del file nell’url, richiedere un altro qualunque file nel file system!! É preferibile, piuttosto, camuffare il nome del file attraverso un codice ed una richiesta alla base di dati (quindi non più http://www.miosito.it/documento.pdf, quanto piuttosto http://www.miosito.it/scarica.php?file=123, dove il file scarica.php attraverso una query alla base di dati identifica il vero nome del file con id 123 e lo serve, cambiandogli magari anche nome, per il download).
Laddove questo accorgimento non fosse praticabile, consigliamo di utilizzare la funzione che segue per il controllo del nome del file attraverso una espressione regolare (con attenzione particolare alla stringa “..”)
function controlloNomeFile($file) {
return preg_match(’/^(((?:\.)(?!\.))|\w)+$/’, $file);
}
Categorie: Programmazione
Argomenti: , PHP