
Owen Little
0
4524
987
Verden af internetsikkerhed er plaget med åbne havne, bagdøre, sikkerhedshuller, trojanere, orme, firewall sårbarheder og en række andre problemer, der holder os alle på tæerne hver dag. For private brugere synes vira og orme at være det værste af mulighederne. Men for alle, der kører en database, er SQL-injektionen en af de mest destruktive sikkerhedsfejl derude.
Databaser er ekstremt værdifulde inden for computere. De er vigtige for at gemme data som hukommelse og vise de forskellige forhold mellem datapunkter. Her på MakeUseOf har vi adskillige databaser dedikeret til forskellige opgaver: en til alle vores artikler, en til vores brugerbase, en til vores Rewards-program, og listen fortsætter. Hvad sker der, når vores databaser er skadeligt angrebet - eller endda ødelagt?
Når du ikke har faktisk adgang til en database, er SQL-injektionen en af de mest fremtrædende former for angreb. Fortsæt med at læse for at lære, hvad det er nøjagtigt, og hvordan det kan være så farligt.
Hvad er SQL, alligevel?
For at forstå SQL-injektion skal du først forstå, hvad SQL er, og hvordan det vedrører et websted. SQL, der står for Structured Query Language, er en type programmeringssprog, der er optimeret til styring af tabeldata. Til alle formål er det bare en måde for programmerere at kommunikere med en database og give den kommandoer.
Hver gang en database udføres, er der SQL-kommandoer, der gives og behandles. Hvis du tænker på alle de tidspunkter, hvor en database bliver handlet, konkluderer du, at det kun sker under en håndfuld omstændigheder:
- Når nye data skal indsættes,
- Når aktuelle data skal ændres,
- Når gamle data skal slettes,
- Når et bestemt stykke data skal søges og hentes.
Hver gang en af disse handlinger skal ske, udføres en SQL-kommando et sted på en server. For det meste kommer programmereren til at bestemme, hvornår og hvor disse SQL-kommandoer forekommer i kildekoden. Der er dog uundgåelige omstændigheder, når en bruger kan tvinge til en manipulation af en database - og disse muligheder er alt omkring dig.
Har du nogensinde logget ind på et websted? Har du nogensinde sendt en kommentar til en blogartikel eller et svar i en forumtråd? Har du nogensinde sendt en Facebook-besked til en ven? Har du skrevet en e-mail i Gmail? Søgte du efter et websted på Google? Hver gang du ser et inputfelt på et websted (brugernavn, adgangskode, søgeforespørgsel, meddelelsesboks osv.), Sendes den tekst til databasen og handler efter.
Nu, hvis en ondsindet bruger ville manipulere med en database, er der ikke meget mange valg for ham. En mulighed ville være at få faktisk fysisk adgang til serveren og ødelægge den ved dens base. Men ellers er det mest fornuftigt for den ondsindede bruger at kapre en eksisterende SQL-kommando, når man bruger et inputfelt, og dermed tvinger serveren til at udføre en kommando, der er forskellig fra, hvad der oprindeligt var beregnet.
SQL-injektionsteknikken
Denne handling med at kapre en eksisterende SQL-kommando er, hvad SQL-injektion refererer til. Hvorfor kaldes det injektion? Fordi kapring af en SQL-kommando kræver, at brugeren injicerer sin egen SQL-kode, når han bruger et inputfelt. Lyder det forvirrende? Lad mig illustrere med et eksempel.
Overvej MakeUseOfs login-side. Når du indtaster dit brugernavn og din adgangskode og rammer “Indsend“, du tvinger webserveren til at generere en SQL-kommando, der involverer de oplysninger, du lige har givet, dvs. dit brugernavn og din adgangskode. Databasen modtager oplysningerne, verificerer, at kombinationen af brugernavn / adgangskode er korrekt, og giver dig derefter den rette adgang til andre områder på webstedet.
Forestil dig nu, hvad der ville ske, hvis en ondsindet bruger ikke indtastede sit brugernavn og adgangskode, men i stedet skrev en SQL-kommando som hans brugernavn? Hvis serverkoden ikke er korrekt sikret, modtager databasen det defekte brugernavn (som virkelig er en SQL-kommando) og kører den faktisk som en kommando.
Og det er derfor, det kaldes injektion. SQL-kommandoen indsprøjtes i databasen ved hjælp af helt legitime midler og manipulerer den sådan, at den ender med at gøre noget, det ikke var meningen at gøre.
Et avanceret eksempel
Indtil nu har jeg beskrevet SQL-injektion på højt niveau, så enhver kan forstå - også dem uden programmeringsviden. I dette afsnit vil jeg give et faktisk eksempel på hvordan denne teknik er mulig. Hvis du er en SQL-newbie, eller hvis du aldrig har beskæftiget dig med programmering før, kan du roligt springe over dette afsnit.
Når du logger på et websted, er her en mulig måde, hvorpå koden kan skrives i SQL:
SELECT user_id
FRA brugere_db
HVOR brugernavn = "$ brugernavn" OG adgangskode = "$ adgangskode"
Grundlæggende beder kommandoen databasen om at returnere alle user_ids fra bordet users_db der matcher det indtastede brugernavn og kodeordkombination. Ser godt ud og spildt, okay?
Lad os antage, at loginformularen fik følgende input:
Brugernavn: David
Adgangskode: fubar 'ELLER' x '=' x
Bemærk, at adgangskodefeltet ikke begynder eller slutter med en apostrof. Når serveren modtager dette loginforsøg, tager det alt, hvad der er angivet i adgangskodefeltet, og sætter det i stedet for $ -adgangskoden i koden. Den resulterende SQL-kommando vil se sådan ud:
SELECT user_id
FRA brugere_db
HVOR brugernavn = "David" OG adgangskode = 'fubar 'ELLER' x '=' x'
Når serveren kører denne kommando, vil den sidste del af den SQL-kommando altid vende tilbage sandt. Dette betyder, at den ondsindede bruger kunne indtaste ethvert brugernavn og øjeblikkeligt få adgang til den konto, fordi login ville fungere, uanset om han fik adgangskoden ret eller ej.
Selvfølgelig er det en temmelig mild lovovertrædelse at logge ind på en person, når du sammenligner det med alle de andre mulige hackforsøg: at slette hele databaser, mugge alle dataene eller endda stjæle dataene i databaserne.
Professionelle webudviklere bliver bedre og bedre til at forhindre sådanne tricks, men en gang imellem hører du, at et selskab led tab i hænderne på et SQL-injektionsangreb. Når det sker, ved du nu, hvad det betyder, og hvordan det er muligt.
Billedkredit: Introbillede via Shutterstock, databaseskema via Shutterstock, HACKED Via Shutterstock