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
- Utilizzare il lock di oggetti con il .NET Framework
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- Effettuare il refresh dei dati di una QuickGrid di Blazor
- .NET Conference Italia 2022 - Track in presenza - Milano
- Chiamare direttamente un numero di telefono con HTML5