En av de største klassene av nettsårbarheter er kjent som "SQL Injection", eller SQLi. Structured Query Language, aka SQL, er språk som brukes til å samhandle med de fleste databaser, selv om en rekke varianter av språket brukes avhengig av databasen plattform. Ethvert nettsted som lagrer brukerdata, for eksempel kontoinformasjon, eller gir brukeropplastingsfunksjonalitet, for eksempel et nettsted som hoster bilder, vil bruke en database for å lagre disse dataene.
Tips: SQL uttales vanligvis enten "ess cue ell" eller "oppfølger" med det første alternativet som er mer vanlig på britisk engelsk og det andre mer utbredt på amerikansk engelsk. Begge uttalene blir generelt forstått i sammenheng med å snakke om databaser.
Hva er SQLi?
SQLi er en sårbarhet der nettutviklerne som designer koden som kommuniserer mellom webserveren og databasen implementerer ikke beskyttelse mot SQL-kommandoer som sendes inn av en bruker. Problemet er at det er mulig å flykte ut av databasesetninger og legge til nye argumenter eller en helt ny setning. Den endrede eller andre databasesetningen kan utføre en rekke handlinger, inkludert potensielt store slettinger eller datalekkasjer.
Utnyttelser dreier seg vanligvis om å få eksisterende utsagn til å være sanne under alle omstendigheter eller å gi en andre batchkommando som utfører en spesifikk handling som å slette eller vise alle data. For eksempel kan en SQL-setning for å logge på et nettsted sjekke om det innsendte brukernavnet og passordet samsvarer med en oppføring i databasen. For å prøve å få tilgang kan en SQL-injeksjonsutnyttelse prøve å legge til en "eller sann"-klausul som "eller 1=1". Dette vil gjøre kommandoen på linje med "logg inn med [dette] brukernavnet, hvis passordet er [dette], eller denne uttalelsen er sann".
Hvordan forhindre SQLi
SQLi pleide å være en veldig vanlig måte for nettsteder å få databasen sin brutt og deretter lekket på nettet. På grunn av en samlet innsats for å sikre at sikkerhetsbevissthet er en del av utvikleropplæringen, har denne klassen av sårbarhet stort sett blitt løst og er bare sjelden sett lenger.
Den riktige metoden for å forhindre SQLi er å bruke forberedte setninger, også kjent som parameteriserte spørringer. Tradisjonelt blir SQL-setninger deklarert og brukerinndataene er koblet sammen i dem under den erklæringen. Med forberedte setninger skrives databasekommandoen ut og deretter kjører en sperate-funksjon kommandoen og setter inn brukerdata. Selv om dette kan virke som en mindre forskjell, endrer det fullstendig hvordan kommandoen håndteres. Forskjellen forhindrer at noen meningsfulle SQL-kommandoer kjøres og behandler alle brukerinndata som en streng, og forhindrer at SQL-injeksjon skjer.