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.
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 --dumpFö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.
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
- SQL-injektion: hur och varför det fungerar
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Felkonfigurationer och exponerade tjänster