E' notizia di qualche giorno fa che una delle versioni della celeberrima applicazione AdMentor conteneva un "bug" in grado di entrare con privilegi di amministratore.
Ovviamente si tratta di un errore di design dell'applicazione stessa.
AdMentor autentica gli utenti tramite una stringa come la seguente:
SQL = "SELECT * FROM users WHERE ID='" & Request("ID") & "' AND password='" & Request("password") & "'"
basta inserire "' OR ''='" come userID e password per ritrovarsi una stirnga SQL così formattata:
SQL = "SELECT * FROM users WHERE ID='' OR ''='' AND password='' OR ''=''"
che avrà come effette quello di farci entrare nell'area riservata, perchè di fatto estrae tutti i record dalla nostra tabella.
Per ovviare a questo genere di problemi, sarebbe opportuno predisporre funzionalità che intercettino i caratteri non leciti, sostiutendoli o rendendelo inoffensivi.
Come prima regola, è sufficiente intercettare e raddoppiare tutti gli apici ('), in questo modo:
SQL = "SELECT * FROM users WHERE ID='" & Replace(Request("ID"), "'", "''") & "' AND password='" & Replace(Request("password"), "'", "''") & "'"
A questo punto avremo una stringa SQL di questo tipo:
SQL = "SELECT * FROM users WHERE ID=''' OR ''''='''' AND password=''' OR ''''='''"
Altro potenziale errore è quello di prendere direttamente un valore numerico e passarlo in pasto alla query: in questo caso è possibile passare un comando al database, semplicemente passando qualcosa come "140 ; DELETE FROM nometabella".
La prima regola è dunque quella di controllare sempre l'input dell'utente, senza passarlo direttamente al database.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Chat con gli MVP italiani di ASP.NET
- Leggere una chiave di un cookie con ASP.NET
- Estrarre dati randomici da una lista di oggetti in C#
- Utilizzare i Behaviors nelle Windows Store app
- Utilizzare tipi complessi con le Profile API