Con questa guida intendo fornire un contributo su alcune questioni legate alla sicurezza nello scrivere codice PHP e tecnologie correlate, riferendomi sia a semplici siti Web sia a vere e proprie applicazioni "over-HTTP", di moda e sempre in aumento in quanto a numeri ed importanza.
Creare applicazioni Web based è un arduo compito anche per il più esperto programmatore: da un lato abbiamo la programmazione in senso stretto - già di per sé poco agevole, in special modo perché si ha a che fare con miriadi di tecnologie e programmi diversi, uniti ed amalgamati forse solamente dall'aderenza alle specifiche del protocollo HTTP - e dall'altro lato molti simpatici "personaggi" il cui unico scopo nella vita è di "bucare" ciò che noi ritenevamo, ovviamente a torto, inviolabile.
Più i dati ed i documenti gestiti dalla nostra applicazione hanno rilevanza, più essa verrà bersagliata da tentativi di attacco degli hacker - o, più propriamente, anche se sembra di parlar d'altro - dei "cracker".
Di più: le applicazioni Web based sono particolarmente soggette e deboli verso molti attacchi per la semplice ragione che il Web e tutta la rete Internet stessa sono nati come strumenti per lo scambio di informazioni tra utenti fidati, senza particolari meccanismi di protezione. Secondariamente, per sua definizione, un'applicazione Web è accessibile da un bacino d'utenza elevato, ivi compresi cracker e "lamer".
Nel seguito tenterò di infondere le basi di una programmazione "sicura", in maniera pratica ed essenziale, delegando ovviamente ogni lettore interessato al relativo approfondimento, il quale non sarà mai e poi mai né troppo né sufficiente.
Le problematiche di sicurezza devono essere tenute in considerazione sin dal principio, in sede di progetto: correggere nel seguito errori fatti precedentemente potrebbe rivelarsi costosissimo. Inoltre va detto che la sicurezza spesso si scontra con l'usabilità di un programma - ciò che nessuno ammette è che, in fin dei conti, per come viene usato un sistema informatico dagli utenti, la troppa sicurezza è nemica di se stessa.. In generale (ma molto in generale), più un programma è sicuro più è restrittivo e meno è usabile. Si deve sapere con esattezza a cosa un programma dovrà servire, sin dall'inizio. È bene tenerlo a mente.
Come è bene tenere a mente che scrivere un programma Web sicuro è solamente uno dei tanti passi per creare un'architettura Web sicura, in quanto i dati dell'applicazione in transito per la Rete, "payload" del protocollo HTTP, potrebbero essere intercettati o modificati anche se la nostra programmazione non fa una grinza: il protocollo TCP stesso, all'interno del quale "viaggia" l'HTTP, può presentare vulnerabilità piccole o grandi, così come un server od un client può essere bucato indipendentemente dalla nostra abilità di programmatori, se mal configurato o se in esso girano programmi bacati (come Internet Explorer), firewall mal impostati e via discorrendo.
Le pagine presenti trattano in maniera assolutamente prevalente di programmazione "sicura" relativamente al linguaggio PHP (prese come riferimento le versioni 4.4 e superiori) e dei linguaggi di scripting client-side correlati, come ad esempio JavaScript.
Quale prerequisito per la lettura, si dà per scontata una buona pratica nella programmazione con l'uso di tale linguaggio ed una conoscenza di base dei meccanismi che regolano l'interazione browser e Web server, in particolare il funzionamento dei protocolli coinvolti.
La principale fonte bibliografica della presente guida è il celeberrimo http://shiflett.org/php-security.pdf, del quale si consiglia la lettura. Ringrazio altresì gli utenti piero.mac, IroN@xiD, andr3a, nik600 per alcuni preziosi consigli fornitimi nel Forum di HTML.it.
Buona lettura. E buona programmazione.