Gå til innholdet

SQL-injeksjon

SQL-injeksjon oppstår når eksterne data endrer strukturen i en databasespørring. Parameterbinding håndterer verdier, ikke tilgangsrettigheter.

IT-sikkerhet

SQL-injeksjon innebærer at deler av SQL-instruksjoner føres inn gjennom data som en applikasjon behandler. Hvis slike verdier bygges inn i teksten i en spørring, kan de endre betydningen. Hvilke data som kan leses eller endres, avhenger blant annet av rettighetene til databasekontoen som brukes.

Skill prosjektfilter og spørringsstruktur

En fiktiv saksportal søker etter poster som tilhører en prosjektreferanse. Den behandler verdien fra feltet projectRef som en bundet spørringsparameter: Strukturen er fast, og verdien sendes separat gjennom databasegrensesnittet. Den skal forbli en søkeverdi og ikke bli en del av SQL-syntaksen.

Det å bare forberede en spørring etter at den er satt sammen av inndata, skaper ikke dette skillet. Heller ikke tidligere lagrede data eller verdier fra andre systemer skal bli ukontrollert SQL-tekst når en senere spørring bygges opp.

Bind verdier og fastsett strukturen

Et sorteringsfelt som sortKey er et annet tilfelle. Plassholdere for dataverdier erstatter ikke vilkårlige kolonnenavn eller sorteringsretninger. Applikasjonen kobler derfor kjente valg til faste kolonner og retninger definert i koden. OWASP beskriver eksplisitt dette skillet mellom parameterbinding og tillatte strukturvalg.

Parameterbinding kontrollerer heller ikke om den innloggede personen har tilgang til prosjektet som etterspørres. Denne tilgangskontrollen er fortsatt applikasjonens oppgave. En databasekonto begrenset til nødvendige rettigheter kan begrense mulig skade; den fjerner ikke selve den usikre oppbyggingen av spørringer.

Kilder