Hvad er SQL Injection?

En af de største klasser af websårbarheder er kendt som "SQL Injection" eller SQLi. Structured Query Language, alias SQL, er sprog, der bruges til at interagere med de fleste databaser, selvom der bruges en række varianter af sproget afhængigt af databasen platform. Ethvert websted, der gemmer brugerdata, såsom kontooplysninger, eller giver brugeruploadfunktionalitet, såsom et websted, der hoster billeder, vil bruge en database til at gemme disse data.

Tip: SQL udtales generelt enten "ess cue ell" eller "sequel", hvor den første mulighed er mere almindelig på britisk engelsk og den anden mere udbredt på amerikansk engelsk. Begge udtaler forstås generelt i sammenhæng med at tale om databaser.

Hvad er SQLi?

SQLi er en sårbarhed, hvor de webudviklere, der designer koden, der kommunikerer mellem webserveren og databasen implementerer ikke beskyttelse mod SQL-kommandoer, der sendes af en bruger. Problemet er, at det er muligt at slippe ud af databaseudsagn og tilføje nye argumenter eller en helt ny udsagn. Den ændrede eller anden databasesætning kan udføre en række handlinger, herunder potentielt omfattende sletninger eller datalæk.

Udnyttelse drejer sig typisk om at få eksisterende udsagn til at være sande under alle omstændigheder eller at levere en anden batchkommando, der udfører en specifik handling, såsom sletning eller visning af alle data. For eksempel kan en SQL-sætning til at logge ind på et websted kontrollere, om det indsendte brugernavn og adgangskode matcher en post i databasen. For at forsøge at få adgang kan en SQL-injection-udnyttelse prøve at tilføje en "eller sand"-sætning såsom "eller 1=1". Dette ville gøre kommandoen i retning af "login med [dette] brugernavn, hvis adgangskoden er [dette], eller denne erklæring er sand".

Sådan forhindrer du SQLi

SQLi plejede at være en meget almindelig måde for websteder at få deres database brudt og derefter lækket online. På grund af en fælles indsats for at sikre, at sikkerhedsbevidsthed er en del af udvikleruddannelsen, er denne sårbarhedsklasse stort set blevet løst og ses kun sjældent længere.

Den korrekte metode til at forhindre SQLi er at bruge forberedte sætninger, også kendt som parametriserede forespørgsler. Traditionelt er SQL-sætninger erklæret og har brugerinput sammenkædet i dem under denne erklæring. Med forberedte sætninger skrives databasekommandoen ud, og derefter kører en sperate-funktion kommandoen og indsætter brugerdata. Selvom dette kan virke som en mindre forskel, ændrer det fuldstændigt, hvordan kommandoen håndteres. Forskellen forhindrer enhver meningsfuld SQL-kommando i at blive kørt og behandler al brugerinput som en streng, hvilket forhindrer SQL-injektion i at finde sted.