Hoppa till innehållet

SQL-injektion

SQL-injektion uppstår när externa data ändrar en databasfrågas struktur. Parameterbindning hanterar värden, inte åtkomsträttigheter.

IT-säkerhet

SQL-injektion innebär att delar av SQL-instruktioner förs in via data som en applikation behandlar. Om sådana värden byggs in i en frågas text kan de ändra dess betydelse. Vilka data som kan läsas eller ändras beror bland annat på rättigheterna för det databaskonto som används.

Skilj projektfilter från frågestruktur

En fiktiv ärendeportal söker poster som hör till en projektreferens. Den behandlar värdet från fältet projectRef som en bunden frågeparameter: Frågans struktur är fast och värdet skickas separat genom databasgränssnittet. Det ska förbli ett sökvärde och inte bli en del av SQL-syntaxen.

Att bara förbereda en fråga efter att den har satts samman av indata skapar inte denna uppdelning. Inte heller tidigare lagrade data eller värden från andra system får bli okontrollerad SQL-text när en senare fråga byggs upp.

Bind värden och fastställ strukturen

Ett sorteringsfält som sortKey är ett annat fall. Platshållare för datavärden ersätter inte godtyckliga kolumnnamn eller sorteringsriktningar. Applikationen kopplar därför kända val till fasta kolumner och riktningar definierade i koden. OWASP beskriver uttryckligen denna skillnad mellan parameterbindning och tillåtna strukturval.

Parameterbindning kontrollerar inte heller om den inloggade personen får komma åt det efterfrågade projektet. Den behörighetskontrollen är fortfarande applikationens uppgift. Ett databaskonto begränsat till nödvändiga rättigheter kan begränsa möjliga skador; det tar inte bort själva den osäkra frågekonstruktionen.

Källor