FixVibe
Covered by FixVibecritical

SQL-injektion: Forhindring af uautoriseret databaseadgang

SQL-injektion (SQLi) er en kritisk sårbarhed, hvor angribere forstyrrer en applikations databaseforespørgsler. Ved at injicere ondsindet SQL-syntaks kan angribere omgå godkendelse, se følsomme data som adgangskoder og kreditkortoplysninger eller endda kompromittere den underliggende server.

CWE-89

Virkningen af SQL-injektion

SQL-injektion (SQLi) giver en hacker mulighed for at forstyrre de forespørgsler, som en applikation foretager til sin database [S1]. Den primære påvirkning omfatter uautoriseret adgang til følsomme data såsom brugeradgangskoder, kreditkortoplysninger og personlige oplysninger [S1].

Ud over datatyveri kan angribere ofte ændre eller slette databaseposter, hvilket fører til vedvarende ændringer i applikationsadfærd eller datatab [S1]. I alvorlige tilfælde kan SQLi eskaleres for at kompromittere back-end-infrastrukturen, muliggøre denial-of-service-angreb eller give en vedvarende bagdør ind i organisationens systemer [S1][S2].

Grundårsag: Usikker inputhåndtering

Grundårsagen til SQL-injektion er ukorrekt neutralisering af specielle elementer, der bruges i en SQL-kommando [S2]. Dette sker, når en applikation konstruerer SQL-forespørgsler ved at sammenkæde eksternt påvirket input direkte i forespørgselsstrengen [S1][S2].

Fordi inputtet ikke er korrekt isoleret fra forespørgselsstrukturen, kan databasefortolkeren udføre dele af brugerinputtet som SQL-kode i stedet for at behandle det som bogstavelige data [S2]. Denne sårbarhed kan manifestere sig i forskellige dele af en forespørgsel, herunder SELECT-sætninger, INSERT-værdier eller UPDATE-sætninger [S1].

Konkrete rettelser og afhjælpninger

Brug parametrerede forespørgsler

Den mest effektive måde at forhindre SQL-injektion på er brugen af parametriserede forespørgsler, også kendt som forberedte sætninger [S1]. I stedet for at sammenkæde strenge, bør udviklere bruge strukturerede mekanismer, der gennemtvinger adskillelsen af ​​data og kode [S2].

Princippet om mindste privilegium

Programmer skal oprette forbindelse til databasen med de laveste rettigheder, der kræves til deres opgaver [S2]. En webapplikationskonto bør ikke have administrative rettigheder og bør være begrænset til de specifikke tabeller eller operationer, der er nødvendige for dens funktion [S2].

Inputvalidering og -kodning

Selvom det ikke er en erstatning for parametrering, giver inputvalidering et dybdegående forsvar [S2]. Applikationer skal bruge en accept-kendt-god strategi, der validerer, at input matcher forventede typer, længder og formater [S2].

Hvordan FixVibe tester for det

FixVibe dækker allerede SQL-injektion gennem det gated active.sqli scannermodul. Aktive scanninger kører kun efter domæneejerskabsbekræftelse og attestering. Kontrollen gennemgår GET-slutpunkter med samme oprindelse med forespørgselsparametre, etablerer et baseline-svar, leder efter SQL-specifikke booleske anomalier og rapporterer kun en konstatering efter timingbekræftelse på tværs af flere forsinkelseslængder. Repository-scanninger hjælper også med at fange hovedårsagen tidligere gennem code.web-app-risk-checklist-backfill, som markerer rå SQL-kald bygget med skabeloninterpolation.