Hva er en SQL-injeksjon? [MakeUseOf Forklarer]

Hva er en SQL-injeksjon? [MakeUseOf Forklarer] / Webkultur

Verden av Internett-sikkerhet er plaget med åpne porter, bakdører, sikkerhetshull, trojanere, ormer, brannmur sårbarheter og en rekke andre problemer som holder oss alle på våre tær hver dag. For private brukere synes virus og ormer å være det verste av mulighetene. Men for alle som kjører en database, er SQL-injeksjonen en av de mest ødeleggende sikkerhetsfeilene der ute.

Databaser er ekstremt verdifulle innen datamaskiner. De er essensielle for lagring av data som minne og viser de ulike relasjonene mellom datapunkter. Her på MakeUseOf har vi en rekke databaser som er dedikert til ulike oppgaver: en for alle våre artikler, en for brukerbase, en for vårt belønningsprogram, og listen fortsetter. Hva skjer når våre databaser er skadelig angrepet - eller ødelagt?

Når du ikke har faktisk tilgang til en database, er SQL-injeksjonen en av de mest fremtredende angrepsmåtene. Fortsett å lese for å lære hva det er akkurat og hvordan det kan være så farlig.

Hva er SQL, uansett?

For å forstå SQL-injeksjon må du først forstå hva SQL er og hvordan det relaterer seg til et nettsted. SQL, som står for Structured Query Language, er en type programmeringsspråk optimalisert for styring av tabelldata. For all hensikt er det bare en måte for programmerere å kommunisere med en database og gi den kommandoer.

Når en database blir oppført, er det SQL-kommandoer som blir gitt og behandlet. Hvis du tenker på alle tider når en database blir håndtert, vil du konkludere med at den bare skjer i en rekke tilfeller:

  • Når nye data må settes inn,
  • Når nåværende data må endres,
  • Når gamle data må slettes,
  • Når et bestemt data må søkes og hentes.

Når som helst en av disse handlingene må skje, blir en SQL-kommando utført et sted på en server. For det meste får programmereren å bestemme når og hvor disse SQL-kommandoene forekommer i kildekoden. Imidlertid er det uunngåelige omstendigheter når en bruker kan tvinge en manipulering av en database - og disse mulighetene er rundt deg.

Har du noen gang logget inn på et nettsted? Har du noen gang lagt inn en kommentar på en bloggartikkel eller et svar i et forumtråd? Har noen gang sendt en Facebook-melding til en venn? Skrives en epost i Gmail? Søkt etter et nettsted på Google? Når du ser et inntastingsfelt på et nettsted (brukernavn, passord, søk, meldingsboks, etc.), sendes denne teksten til databasen og handles på.

Nå, hvis en ondsinnet bruker ønsket å tukle med en database, er det ikke så mange valg for ham. En mulighet ville være å få faktisk fysisk tilgang til serveren og ødelegge den ved sin base. Men ellers er det mest hensiktsmessig for den ondsinnede brukeren å kapre en eksisterende SQL-kommando når du bruker et inntastingsfelt, og dermed tvinge serveren til å utføre en kommando forskjellig fra det som opprinnelig var ment.

SQL-injeksjonsteknikken

Denne handlingen med å kapre en eksisterende SQL-kommando er hva SQL-injeksjon refererer til. Hvorfor kalles det injeksjon? Fordi hijacking en SQL-kommando krever at brukeren skal injisere sin egen SQL-kode når han bruker et inntastingsfelt. Høres det forvirrende ut? La meg illustrere med et eksempel.

Vurder MakeUseOf sin påloggingsside. Når du skriver inn brukernavnet og passordet ditt og klikker “Sende inn“, du tvinger webserveren til å generere en SQL-kommando som innebærer informasjonen du nettopp ga, det vil si ditt brukernavn og passord. Databasen mottar informasjonen, bekrefter at brukernavnet / passordkombinasjonen er riktig, og gir deg den riktige tilgangen til andre områder av nettstedet.

Tenk nå hva som ville skje hvis en ondsinnet bruker ikke skrev inn brukernavnet og passordet, men i stedet skrev han en SQL-kommando som brukernavn? Hvis serverkoden ikke er ordentlig sikret, vil databasen motta feil brukernavn (som egentlig er en SQL-kommando) og faktisk kjøre den som en kommando.

Og det er derfor det kalles injeksjon. SQL-kommandoen injiseres i databasen gjennom helt legitime midler, manipulerer den slik at den ender opp med å gjøre noe det ikke var ment å gjøre.

Et avansert eksempel

Hittil har jeg beskrevet SQL-injeksjon på høyt nivå, slik at alle kan forstå - selv de uten programmeringskunnskap. I denne delen skal jeg gi et faktisk eksempel på hvordan denne teknikken er mulig. Hvis du er en SQL-nybegynner, eller hvis du aldri har jobbet med programmering før, så kan du stille dette avsnittet stille.

Når du logger inn på et nettsted, er det en mulig måte at koden kunne skrives i SQL:

SELECT user_id
FRA users_db
WHERE brukernavn = "$ brukernavn" og passord = "$ passord"

I utgangspunktet spør kommandoen databasen om å returnere alt user_ids fra bordet users_db som samsvarer med inntastet brukernavn og passordkombinasjon. Ser alt bra og dandy, ikke sant?

La oss anta at innloggingsskjemaet ble gitt følgende innganger:

Brukernavn: David
Passord: fubar 'OR' x '=' x

Legg merke til at passordfeltet ikke begynner eller slutter med en apostrof. Når serveren mottar dette påloggingsforsøket, vil det ta alt som er oppgitt i passordfeltet og sette det i stedet for $ passordet i koden. Den resulterende SQL-kommandoen vil se slik ut:

SELECT user_id
FRA users_db
WHERE brukernavn = "David" OG passord = 'fubar 'OR' x '=' x'

Når serveren kjører denne kommandoen, vil den siste delen av SQL-kommandoen alltid returnere sant. Dette betyr at den ondsinnede brukeren kan skrive inn et hvilket som helst brukernavn og umiddelbart få tilgang til den kontoen fordi påloggingen ville fungere om han ikke fikk passordet eller ikke.

Selvfølgelig logger du på en persons konto er en ganske mild forseelse når du sammenligner den med alle andre mulige hackforsøk: sletter hele databaser, slår opp alle dataene, eller til og med stjele dataene i databasene.

Profesjonelle webutviklere blir bedre og bedre for å forhindre slike triks, men hver gang en gang vil du høre at et selskap led tap i hendene på et SQL-injeksjonsangrep. Når det skjer, vet du nå hva det betyr og hvordan det er mulig.

Image Credit: Intro Image Via Shutterstock, Database Schema Via Shutterstock, HACKED Via Shutterstock