Vi anbefaler
 
Blogs
Fokus på foto Game Pro GPS-bloggen PC World Insider Webhotel-bloggen Webworld Windows-bloggen Notesbloggen
Hvis du vil skrive en kommentar til et indlæg, skal du være logget ind.

Du kan logge ind eller oprette en ny brugerkonto her.
 
Bruger log ind
Nyhedsbreve og RSS
 
Samarbejdspartnere
 

Hvad er SQL-injektion?

taster
SQL-injektion. Det lyder ikke rart, og det er det faktisk heller ikke, hvis din webside bliver ramt.
Det er ikke let at holde styr på de mange it-forkortelser. Hvad er en SQL-injektion eksempelvis? Er det noget, du skal være bange for?
Vi går bagom begrebet.

Sådan virker det
SQL-injektion er en teknik, hvor en bruger forsøger at sende SQL-kommandoer gennem en web-applikation til en database-server.

En web-applikation, som er sårbar overfor SQL-injektion, gør det muligt at sende forespørgsler og kommandoer til databaser gennem en hjemmeside.

Det manglende input validering kaldes for "SQL injektion".

Hvis en webapplikation er sårbar over for SQL-injektion, er det muligt for en vilkårlig bruger at sende et særligt udformet brugernavn eller passwordfelt, som vil ændre forespørgslen og potentielt give rettigheder, brugeren normalt ikke har.

I princippet kan SQL-injektion forekomme på alle hjemmesider med dynamisk indhold, hvor det er muligt at afsende data til en bagvedliggende server.

Typisk søges der efter loginformularer, søgefunktioner og lignende. Disse vil typisk transmittere data til en database via en post.

Der findes også meget materiale om SQL-injektion på nettet, hvorfor fremtiden klart vil vise en stigning i sabotage og skamfering af databaser som konsekvens af mangelfuld inputvalidering.

Hvornår kan min hjemmeside blive angrebet?
I princippet kan det selvfølgelig ske når som helst. Min erfaring er dog, at hyppigheden øges vildt i forbindelse med en begivenhed, som eksempelvis Muhammedkrise 1 og 2, hysteriet omkring de kinesiske OL-værter, Danmarks deltagelse i krigen i Irak og så videre.

Tilbage i december blev flere store danske medier ufrivilligt distributører af virus via inficerede reklamebannere på deres hjemmesider.

Den 27. maj 2008 startede et nyt angreb. Denne gang gik det ud over besøgende på TV2's hjemmeside.

Ved middagstid fik besøgende mulighed for at installere programmet "XP AntiVirus 2008".

Hvis brugerne klikkede "ja", blev programmet installeret. Efter installation viser programmet falske advarsler, som skal få brugeren til at betale for et unødvendigt og uvirksomt antivirusprogram.

Hvordan beskytter jeg min database?
Nødløsningen mod SQL-injektion er et escape input med eksempel:

mysql_real_escape_string eller tilsvarende for dit databasesystem, men der kan være fejl i funktionen, hvilket gør, at man alligevel kan slippe gennem, og det har der sågar også været i blandt andet MySQL.

Den mest effektive beskyttelse er at lave ordentlig inputvalidering på din hjemmeside.

Sørg for filtre på enkeltstående anførselstegn, som "'" eller andre tegn, som du ikke ønsker sendes ufiltreret videre til databasen. Dette umuliggør enhver SQL-injektion.

Læs mere om: Internet
Kommentarer
  Anmeld kommentár = Anmeld kommentár

Anmeld kommentár Skrevet d. 19. juni 2008 kl. 23:06 af Peer
Endnu en artikel fra PC World skrevet af en fyr der ikke ved hvad han taler om.

Han bliver ved med at sige at det er noget der forekommer i Web applikationer. Det er noget vås. Alle typer applikation der bruger en database, tynde som fede kan være sårbare overfor SQL injection.

Og oftest skal man blot bruge de muligheder der findes i ens udviklingssprog for at forhindre sårbarheder. F.eks er det meget normalt at man laver en parameter binding og så opstår problemet ikke.
Anmeld kommentár Skrevet d. 25. juni 2008 kl. 22:03 af Jonas
Jeg er efterhånden stødt på den her artikel et par gange, men har ikke fået taget mig sammen til at skrive noget før nu:

Der er meget rod i artiklen. SQL-injektion er f.eks. ikke en forkortelse. SQL er forkortelsen, som du egentlig ikke forklarer.

SQL (Structured Query Language) er et sprog der bruges til at manipulere data i en relationel database. Det er rigtigt at de fleste dynamiske hjemmeside har et RDBMS i ryggen, og at det sprog der bruges til at danne de dynamiske sider er SQL.

MEN

Manglende input validering er IKKE lig med SQL injektion. Det ER manglende input validering der kan føre til SQL injektion, men det er ikke 100% sikkert at du er sårbar for det.

Peer skriver rigtigt nok at det ikke kun er Web sider der er sårbare - jeg er helt enig. Alle programmer der skaber dynamisk indhold på baggrund af en database der tilgås via SQL er i teorien sårbar. Det interessante i forbindelse med WEB er den måde at webservere ofte er sat op til at vise fejl inline, altså sideløbende med den side der skal vises.

Hvis man kigger på PHP f.eks., så skriver de i deres dokumentation at de anbefaler at man slår visning af fejl fra på "produktionsservere" - det betyder at slutbrugerne ikke kan se hvad der går galt når det glipper bag kulisserne. Samtidig betyder det at man - hvis man filtrerer resultatet fra databasen ordentligt, og validerer input til databasen - kan undgå at give for meget information til eventuelle hackere.

Du nævner nogle situationer hvori SQL-injektioner bliver brugt, men det minder om en faktaboks i Ud & Se. hvorfor ikke skrive lidt om hvad man kan gøre af praktiske ting for at undgå injektioner?

f.eks. hvis man har et navnefelt som input - så accepter kun a-å,A-Å og " " - der skal ikke kunne tastes tal osv i sådan et felt. ligeledes for telefonnumre - accepter kun 0-9.

Lav dine login forespørgsler så de ikke returnerer nogen brugeroplysninger i første instans. f.eks. (MYSQL forespørgel i PHP kode)

SELECT IF(bruger.adgangskode = password('".$strPass."'), 'true', 'false' ) AS validuser FROM bruger WHERE Username='".$strUser."' and aktivFra < now() and aktivTil > now();

Læg også mærke til at den ikke bruger varialerne direkte fra $_REQUEST eller $_POST - de har været igennem validering.

På denne måde kan en evt angriber for det første ikke "bare lige uden videre" få adgang til systemet, og selv om han skulle gætte et brugernavn, så er der ikke noget følsomt data der bliver eksponeret.
Anmeld kommentár Skrevet d. 6. juli 2008 kl. 17:36 af Jonas
http://www.communities.hp.com/ (...)

HP's blog om SQL injection, samt tips til at undgå det

og lidt ekstra info her:
http://www.net-security.org/ (...)
Kommentér indlæg
Hvis du vil skrive en kommentar til indlægget er det nødvendigt, at du er logget ind. Du kan logge ind eller oprette en ny brugerkonto her.
Thomas Jacobsen, Surftown
Thomas Jacobsen er ophavsmand bag
Surftowns firmablog og er uddannet markedsøkonom med speciale i produktudvikling.

Artikler af blogger
25. juni 2008 kl. 09:01
19. juni 2008 kl. 10:31
13. juni 2008 kl. 09:01
12. juni 2008 kl. 10:30
9. juni 2008 kl. 10:30
Seneste blogindlæg




Copyright © 1985-2012 IDG Danmark A/S | Brug af personoplysninger | Om IDG Danmark
PC World Danmark | Hørkær 18 | 2730 Herlev | Telefon: +45 77 300 300 | Telefax: +45 77 300 304
Aktuelle priser