SQL Programmering: Sikker programudvikling

SQL Programmering: Sikker programudvikling

Hvordan sikrer du, at din kode bliver sikker? Vi hjælper dig på vej

Vi har tidligere på disse sider skrevet om forskellige metodikker til, hvordan man kan udvikle sikker kode. Men vi er endnu ikke kommet med konkrete eksempler på, hvad sikker kode vil sige. Det råder vi bod på i denne samt en efterfølgende artikel.

I denne første del vil vi have fokus på SQL injection. Den næste artikel, som du kan læse i Alt om DATA nr. 4 2017, vil fokusere på de ting, man skal være opmærksom på, når man koder i f.eks. C/C++. Men vi starter som lovet med et kig på SQL injection og dennes sårbarheder.

Angreb med SQL injection

SQL injection er og har været i mange år en kernedel af en angribers våbenarsenal. Vi hører til stadighed om, at mange indbrud hos selv store virksomheder er baseret på et SQL injection-angreb. Men hvad er et SQL injection-angreb, og hvad består det af? Lad os starte med at kigge på et eksempel.

Se også:  Programmerer du?

Tag et kig på figur 1.

Figur 1

Her har vi konstrueret en tekststreng, som har til formål at skulle bruges som en forespørgsel til databasen. Selve forespørgslen vil fungere, men hvis du kender til ASP.NET-programmering, så vil du lægge mærke til, at vi har brugt tekstværdierne fra input-boksene direkte i SQL-strengen. Det er en rigtig dårlig ide, da jeg ikke kan vide, hvad brugeren i den anden ende skriver ind i mine tekstbokse.

Hvis nu en snedig bruger skriver ’OR 0=0’, ind i de to tekstbokse, så vil min SQL-streng pludseligt se ud som på figur 2.

Figur 2

Nu har jeg pludselig en tekststreng, som vil logge brugeren ind uden et brugernavn eller et password, hvis den bliver eksekveret af en database.

Ved at skrive ’OR 0=0’ i tekstboksene, har brugeren lavet en tekststreng, som altid vil være sand, forstået på den måde, at når en database ser en option, der siger ’OR 0=0’, så ser den en option, der altid vil være sand. 0 er altid lig med 0, og ved at bruge ’OR’-option i SQL, så vil hele den del, der omhandler UserName og PassWord være sande.

Se også:  Lær dine børn at kode

Voila, en fuldstændig ukendt bruger er nu logget ind på systemet. Nu har vi brugt brugernavn og password i dette eksempel, men det samme gør sig gældende for alle andre SQL queries, som bliver opbygget dynamisk af systemet på baggrund af, hvad en bruger skriver i forskellige input-bokse.

Der findes et utal af forskellige SQL injection-sårbarheder ude på det grumme internet.

Jeg har vist, hvordan en bruger kan logge ind uden et brugernavn og et password, men der er andre måder en angriber kan forårsage kaos på et system, der har adgang til internettet.

Del denne