Vad är en SQL-injektion?

Vi börjar med den grovt förenklade versionen. En SQL-injektion är ett knep en busig besökare till en internetsida kan använda sig av för att få sajten att göra sådant vanliga användare inte borde kunna få den att göra.

 

När du matar in data i en webbsajt kommunicerar sajten med en databas.

Det kan t.ex. vara fråga om att du ska logga in någonstans. Du matar in ditt användarnamn och lösenord. Sedan jämför sajten dem med vad den har sparat i en databas: finns det användarnamnet och är det kopplat till det lösenordet?

Alternativt kanske du matar in ditt namn, din address, e-post eller dylikt i sajten. Då lägger sajten till den informationen i en databas.

 

Det är den här kommunkationen - det att sajten ska kunna kommunicera med en databas - som skapar möjligheten för en SQL-injektion.

Om vad SQL-injektion betyder

SQL står för Structured Query Language. SQL är ett språk som används för att kommunicera med en databas.

En SQL-injektion är att en besökare till en internetsida "injicerar" ett SQL kommando åt sajten.

Om hur en SQL-injektion går till

Först måste man ha en internetsida som ger möjligheten åt användare att mata in text. Inloggningsinformation, möjlighet att gå med i e-post listor el.dyl.

En SQL-injektion går till så att busen matar in specialtecken som säger: "Nu matar jag inte längre in data, utan nu har jag en uppgift åt dig."

 

Busen kan på det här sättet få sajten att göra olika saker. Som att få ut kopior av sajtens databaser över användarnamn, lösenord och e-post addresser. Eller så kan busen använda en SQL-injektion för att lura sajten att tro att busen har rätt lösenord till någon annans konto.

Busen kan också meka med databaser. Som i fallet "Exploits of a Mom" i xkcd.

exploits_of_a_mom.png

Om att det går att förhindra

Mamman har givit en SQL-injektion som namn åt sin son. Efter förnamnet "Robert" kommer specialtecken som säger: Nu matar jag inte längre in data, utan nu har jag en uppgift åt dig.

 

Sedan kommer själva uppgiften - det injicerade SQL kommandot "DROP TABLE Students". DROP TABLE är SQLs variant av "radera". Genom att mata in Roberts namn har skolan raderat alla sina elevuppgifter.

De goda nyheterna är, som mamman meddelar åt skolan: det går att skydda sajter mot SQL-injektioner. Så är du ansvarig för en webbsida där användare kan mata in data, kom ihåg lilla Bobby Tables.