Uno degli aspetti fondamentali quando si sviluppa un applicativo web è senz'altro la sicurezza.
Quando poi si interagisce con un database per creare piattaforme più o meno complesse ecco che garantire una stabilità all'applicazione non è più un accessorio ma un'esigenza.
Così, quando mi trovo davanti a situazioni come quella appena capitata non posso che rimanere allibito!
Scena: Un mio collega mi passa l'URL di un sito di un nostro cliente per pianificare la strategia SEO. Su messenger accompagna l'URL con un commento del tipo: questa non te la puoi proprio perdere! Apro messenger, carico l'URL e cosa vedo? Il CMS del cliente presenta un URL del tipo
/lista_prodotti.asp?strSQL=Select+%2A+From+PRODOTTI+Where+visibile+%3D+1
Gulp! L'intera SQL passata via querystring in bella mostra. Non ho provato ad usare uno statement DELETE o UPDATE, peggio ancora DROP, ho paura delle conseguenze.
Giusto per curiosità provo a cambiare un valore numerico con una stringa, con lo scopo di generare un innocuo errore.
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]
Il nome di colonna 'xyz' non è valido.
Eh sì, chiedere un controllo sull'integrità dei campi era troppo.
Si tratterà di un caso sporadico mi dico. Accedo al sito della web agency e scopro che si tratta nientemeno di un CMS! Inutile dirvi che una semplice query su Google per allinurl:strSQL=SELECT (Nb. la query è fittizia per preservare la "sicurezza" del cliente) restituisce una lista completa di tutti i clienti della web agency che attualmente usano il CMS "esplosivo".
A questo punto, sconfortato dal vedere così tanta incapacità di programmazione e sviluppo in un colpo solo, mi viene in mente una cosa: ma saranno gli unici?
Proprio no.
Ancora una volta mi lancio su Google e cerco di individuare una semplice sintassi che mi restituisca una possibile lista di pagine con SQL passato via querystring: allinurl:sql select from where
Vi lascio immaginare, senza neppure necessità di troppa fantasia, quali danni potrebbe causare un utente un po' più smaliziato...
Ebbene sì, la sicurezza non è un optional!