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
- I tutorials, percorsi guidati per tutti
- Costruire applicazioni cross-plaftorm con Visual Studio 2013 e Xamarin
- Creare semplici grafici a barre con ASP
- rilasciato #mono 2.8.1: bug fix importanti, anche di security: http://u.aspitalia.com/o5
- Mappare una relazione uno a molti con Entity Framework Code First
- Dichiarare tutte le proprietà di un record usando solo il costruttore in C#
- Gestire la cancellazione di una richiesta in streaming da Blazor
- Fragment Caching con dipendenza da altri controls
- grazie a tutti per aver seguito #aspilive! tutto il materiale è già online e le registrazioni saranno pubblicate nei prossimi giorni su => https://aspit.co/BlazorConf-20
- Modificare i metadati nell'head dell'HTML di una Blazor Web App