Gå til indholdet

SQL-injektion

SQL-injektion opstår, når eksterne data ændrer strukturen i en databaseforespørgsel. Parameterbinding håndterer værdier, ikke adgangsrettigheder.

IT-sikkerhed

SQL-injektion er indførsel af dele af SQL-instruktioner gennem data, som en applikation behandler. Hvis sådanne værdier sættes ind i en forespørgsels tekst, kan de ændre dens betydning. Hvilke data der kan læses eller ændres, afhænger blandt andet af rettighederne for den anvendte databasekonto.

Adskil projektfilter og forespørgselsstruktur

En fiktiv sagsportal søger poster til en projektreference. Den behandler værdien fra feltet projectRef som en bundet parameter: Forespørgslens struktur ligger fast, og værdien overføres separat gennem databasegrænsefladen. Den skal forblive en søgeværdi og ikke blive en del af SQL-syntaksen.

Blot at forberede en forespørgsel, efter at den er sammensat af input, skaber ikke denne adskillelse. Tidligere gemte data eller værdier fra andre systemer må heller ikke blive ukontrolleret SQL-tekst, når en senere forespørgsel opbygges.

Bind værdier, og fastlæg strukturen

Et sorteringsfelt som sortKey er et andet tilfælde. Pladsholdere for dataværdier erstatter ikke vilkårlige kolonnenavne eller sorteringsretninger. Applikationen knytter derfor kendte valg til faste kolonner og retninger defineret i koden. OWASP beskriver udtrykkeligt denne forskel mellem parameterbinding og tilladte strukturvalg.

Parameterbinding kontrollerer heller ikke, om den indloggede person må tilgå det ønskede projekt. Denne rettighedskontrol er stadig applikationens opgave. En databasekonto begrænset til de nødvendige rettigheder kan begrænse mulige skader; den fjerner ikke selve den usikre opbygning af forespørgsler.

Kilder