Cyber Security Academy · Lektion

SQL-injektion: hur och varför det fungerar

Förstå klassisk, blind och out-of-band SQLi samt varför parameteriserade frågor förhindrar dem.

Lektion 1 av 413 steg

SQL-injektion: hur och varför det fungerar är en gratis lektion i Cyber Security Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Cyber Security Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.

Vad är SQL-injektion?

SQL-injektion (SQLi) uppstår när användarindata inkluderas i en SQL-fråga utan korrekt sanering, vilket gör det möjligt för angripare att manipulera frågans logik. Det är en av de äldsta och mest skadliga sårbarheterna i webbapplikationer.

Så fungerar SQL-injektion

Ett inloggningsformulär kör frågan: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'

Om angriparen anger ' OR 1=1-- som användarnamn blir frågan: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' — vilket returnerar alla användare.

Typer av SQL-injektion

Varianter av SQLi:

  • In-band: resultat returneras direkt i svaret (klassisk, felbaserad)
  • Blind Boolean: ingen direkt utdata; data härleds från svar som är sanna eller falska
  • Blind Time-based: data härleds från svarsfördröjningar (SLEEP(5))
  • Out-of-band: data exfiltreras via DNS-/HTTP-begäranden

UNION-baserad injektion

UNION-attacker lägger till resultat från angriparkontrollerade frågor:

-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--

Felbaserad injektion

Felmeddelanden avslöjar databasens struktur. En angripare skickar in data som orsakar ett syntaxfel, och det resulterande felmeddelandet läcker tabellnamn, kolumnnamn eller databasversion. Inaktivera utförliga felmeddelanden i produktionsmiljöer.

Blind SQL-injektion

När ingen utdata är synlig använder angripare booleska villkor:

-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--

sqlmap: automatiserad SQL-injektion

sqlmap automatiserar identifiering och utnyttjande av SQL-injektioner. Det kan dumpa databaser, läsa filer och till och med köra operativsystemkommandon om databasanvändaren har tillräckliga behörigheter.

sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dump

Förhindra SQL-injektion: parametriserade frågor

Det främsta försvaret är parametriserade frågor (förberedda satser). Användarindata skickas som en parameter och sammanfogas aldrig med frågesträngen:

# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])

ORM-skydd

Användning av ett ORM-verktyg (SQLAlchemy, Hibernate, Sequelize) förhindrar vanligtvis SQL-injektion, eftersom frågor byggs med säkra abstraktioner. Råfrågemetoder (execute(), query()) med stränginterpolering kringgår dock ORM-skyddet.

Indatavalidering och WAF

Ytterligare försvarsåtgärder:

  • Validera och vitlista indatatyper (heltal, e-postadresser)
  • Web Application Firewall (WAF) för att upptäcka injektionsmönster
  • Databaskonton med minsta möjliga behörighet (ingen DROP och ingen UNION i skrivskyddade frågor)
  • Lagrade procedurer (minskar exponeringen men är ingen fullständig lösning)

Konsekvenser av SQL-injektion

En lyckad SQL-injektion kan leda till: fullständig dump av databasen, kringgående av autentisering, ändring eller radering av data, läsning av serverfiler (LOAD_FILE), uppladdning av webbskal och körning av operativsystemkommandon via xp_cmdshell (MSSQL).

Snabbtest: SQL-injektion

Vilket är det främsta skyddet mot SQL-injektion?

Lektionens sammanfattning

SQL-injektion manipulerar databasfrågor via osanerad användarinmatning. Angreppstyperna omfattar klassisk SQL-injektion, blind boolean-baserad SQL-injektion, tidsbaserad SQL-injektion och UNION-baserad SQL-injektion. Det främsta skyddet är parametriserade frågor – konkatenera aldrig användarinmatning till SQL. Använd ORM:er försiktigt, tillämpa principen om minsta privilegium för databasåtkomst och inaktivera utförliga felmeddelanden.

Gratis att börja

Lär dig Cyber Security Academy med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
303

Vanliga frågor

Är lektionen ”SQL-injektion: hur och varför det fungerar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Cyber Security Academy, inklusive ”SQL-injektion: hur och varför det fungerar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”SQL-injektion: hur och varför det fungerar”?

Förstå klassisk, blind och out-of-band SQLi samt varför parameteriserade frågor förhindrar dem. Ni övar på Cyber Security Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Cyber Security Academy?

Du behöver inga förkunskaper. Utbildningen i Cyber Security Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”SQL-injektion: hur och varför det fungerar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Cyber Security Academy-lektionen?

Ja. Varje Cyber Security Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. SQL-injektion: hur och varför det fungerar
  2. Cross-Site Scripting (XSS)
  3. Cross-Site Request Forgery (CSRF)
  4. Felkonfigurationer och exponerade tjänster
← Tillbaka till Cyber Security Academy