51. Sicurezza
Un pò di sicurezza non guasta mai, soprattutto quando il traffico generato dal vostro sito diventa consistente.
Purtroppo (parlo per esperienza personale) è pieno di individui inetti senza una vita sociale, che passeranno le ore a cercare bachi e buchi nei
vostri script e server con il solo scopo di rompervi i coglioni.
Non riuscirete mai a creare un sistema veramente infallibile, ma cercate almeno di rendere la vita un pò più difficile a questi bastardi, anche se credo che in questo caso ne godranno ancora di più.
Cerchiamo innanzitutto di dare meno informazioni possibili sul nostro server.
Provocando ad esempio un 404 (Pagina non trovata) possiamo subito vedere la risposta standard del nostro web server, nel mio caso :
Apache/2.2.4 (Win32) PHP/5.2.3 Server at localhost Port 80
Diamo fin troppe informazioni ai malintenzionati ... informazioni di nessuna utilità per i navigatori del nostro sito, perciò procediamo aprendo il file di configurazione di Apache (Apache2.2/conf/httpd.conf) e modificando i seguenti parametri :
- ServerTokens - Di default questo parametro è impostato a Full, cambiatelo con Prod
- ServerSignature - Di default questo parametro è impostato a On, cambiatelo con Off
In questo modo l'ultima riga viene eliminata restituendo un semplice Not Found.
|
Altra cosa molto importante è l'estensione dei file di librearia. Molti programmatori hanno l'abitudine di dare un'estensione differente ai file che contengono classi e funzioni (solitamente .inc) dimenticando però di configurare correttamente il web server per proteggere il codice. A scanso di equivoci io consiglio di utilizzare sempre e solo l'estensione .php anche per i file da includere, in tal modo se viene richiesta una pagina verrà interpretata come codice PHP dal server, e non produrrà quindi alcun output sul browser. Un altro consiglio che posso darvi è quello di criptare sempre i dati sensibili dei vostri utenti come ad esempio le password. |
Personalmente preferisco algoritmi di criptazione a "senso unico", ossia che data una stringa ne viene generata un altra univoca criptata, ma data la stringa criptata non è possibile risalire alla stringa originale (vedi "md5()").
In questo modo se un utente dimentica la password, neppure per noi sarà possibile recuperarla, e il metodo migliore sarà quindi resettare la password con una temporanea generata casualmente consentendo poi all'utente di modificarla a sua volta.
Input & Output
Uno script robusto dovrà processare sempre tutti gli input degli utenti, specie se questi dati in input andranno poi memorizzati in supporti comuni come un database MySQL.
Un attacco comune basato su questi errori è chiamato SQL Injection, di seguito un articolo valido sull'argomento.
Vi consiglio di controllare sempre in modo restrittivo gli input degli utenti attraverso ad esempio le Espressioni regolari, eliminando caratteri speciali quali l'apostrofo, i trattini (-- commento in SQL) e altri.
Se permettete agli utenti di lasciare ad esempio commenti sul sito che saranno automaticamente pubblicati senza approvazione, è buona abitudine eliminare i caratteri speciali HTML dall'output, per rendere vani i tentativi di inserire codice maligno ad esempio in JavaScript.
Questo è possibile attraverso la funzione htmlentities() che sostituisce i caratteri speciali dell'HTML nelle rispettive entità.
Cercate inoltre di evitare di passare dati sensibili e ID di sessione col metodo GET. In questi casi affidatevi a POST.
FileIl valore di default in PHP 5 per la dimensione massima di un file che può essere ricevuto dal server è 8MB. Molto spesso capita di costruire applicazioni che dovranno gestire solo file di circa 1MB o meno, assicuratevi quindi di non sovraccaricare inutilmente il server con file che non saranno poi gestiti ma eliminati immediatamente. Questo è possibile modificando la proprietà post_max_size del php.ini attraverso la funzione ini_set() o modificando direttamente il file di configurazione. |
Conclusioni
Direi che è tutto, anche se sull'argomento ci si potrebbe scrivere un libro intero.
Vi consiglio quindi di non fermarvi a queste premesse ma di approfondire l'argomento, perchè ci sarà sempre qualcuno più in gamba, e quel qualcuno probabilmente sarà anche più bastardo e disoccupato di voi.
- Linguaggi:

