PDA

View Full Version : SQL injection


Fenomeno85
29-06-2008, 13:17
Allora ho da fare un esame e dentro ci può essere sql injection. Solo che non capisco cosa fare.

Esempi:
a) una applicazione web in html in cui è presente una form che consente di inviare una email con contenuto generico (textfield) a un indirizzo inserito dall'utente (user_address). Questo indirizzo deve essere tra quelli presenti in una tabella autorizzata. Prima di inviare si esegue

select count(*)
from ValidAddressTable
where address = ' + user_address + '

1) illustrare il modo di manipolare il sistema per inviare una mail a un indirizzo arbitrario
2) illustrare come si può rendere più sicura l'applicazione

Se mando dentro user_address = ' 1or1

il count dovrei averlo bypassato .. ma poi come faccio a mettere dentro l'indirizzo che voglio?

b)applicazione per il login:

select count(*)
from user
where pwd='+ stringa_pwd + ' and login = ' + stringa_login + '

1) come violare la sicurezza dando un esempio
2) cosa cambirebbe se ci fosse invece un controllo sul fatto che il risultato dell'istruzione sia esattamente pari a 1?
3) cosa si deve fare per proteggere l'applicazione?
4) sulla query di partenza, si riesce a leggere dati da una tabella con lo stesso numero di colonne della tabella user? se si come?
5) cosa si deve fare per eliminare questo problema?

Soluzione mia:
1) metto string_pwd = ' 1 or 1 '--
3) la modifica sarebbe di controllare che non ci siano '-- o altri comandi sql

Qualcuno mi spiega come si fanno ste cose?

~§~ Sempre E Solo Lei ~§~

Fenomeno85
30-06-2008, 10:12
Uppo nella speranza :)

~§~ Sempre E Solo Lei ~§~

RaouL_BennetH
30-06-2008, 15:12
a livello di esame universitari non ne ho la minima idea, ma in genere bastano dei 'parameters' per evitare sql iniection.

In base all'applicazione e al db, può variare qualcosa.

Faccio un esempio in C# e MySql



SELECT COUNT(*) FROM Utenti WHERE userName = ? AND userPass = ?

//evitando quindi il classico:

where userName = '" + testo.Text + "' blabla


MySqlParameter user = new MySqlParameter("?user", MySqlDbType.Tipo, lunghezza)
user.Value = testoUserName.Text

//stessa cosa per password



In genere i SqlParameter (che siano mysql, sql, odbc o che) sono usati apposta per questo .

Fenomeno85
30-06-2008, 16:02
il problema è che devo risolvere quel tipo di esercizi :cry:

~§~ Sempre E Solo Lei ~§~