Cloud & IT Cert Prep · Lektion

SQL-injektion och kommandoinjektion

Lär dig hur angripare utformar injektionsnyttolaster som manipulerar databasfrågor eller operativsystemkommandon, och hur parametriserade frågor och indatavalidering förhindrar dem.

Lektion 1 av 413 steg

SQL-injektion och kommandoinjektion är en gratis lektion i Cloud & IT Cert Prep på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cloud & IT Cert Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.

Vad är SQL-injektion?

SQL-injektion (SQLi) uppstår när en angripare infogar eller ”injicerar” skadlig SQL-kod i ett inmatningsfält som senare skickas vidare till en databasfråga. Eftersom applikationen sammanfogar användarens indata direkt med en SQL-sats kan databasen inte skilja mellan legitima data och kommandon som angriparen har skickat. SQLi rankas konsekvent som en av de farligaste webbrelaterade sårbarheterna i OWASP Top 10.

Exempel på klassisk SQLi-payload

En sårbar inloggningsfråga kan se ut så här: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. En angripare som anger ' OR '1'='1 som användarnamn omvandlar frågan så att WHERE-villkoret alltid är sant, vilket helt kringgår autentiseringen. Detta är den klassiska injektionen baserad på en tautologi.

-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
  AND password = 'anything';
-- Returns ALL rows — auth bypassed

Typer av SQL-injektion

SQL-injektionsattacker förekommer i flera former: In-band SQLi returnerar resultat direkt i HTTP-svaret (baserad på fel eller union). Blind SQLi härleder data genom booleska svar som är sanna eller falska, eller genom avsiktliga tidsfördröjningar (SLEEP(5)). Out-of-band SQLi använder sekundära kanaler, till exempel DNS-uppslagningar, för att exfiltrera data när svaren inte är synliga.

-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeeded

Förhindra SQLi: parametriserade frågor

Det främsta skyddet mot SQL-injektion är parametriserade frågor (även kallade förberedda satser). I en parametriserad fråga kompileras SQL-strukturen först, och användarens indata skickas som en separat parameter – den kan aldrig ändra frågans struktur. Denna metod är språkoberoende och betydligt mer tillförlitlig än enbart sanering av indata.

# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
    'SELECT * FROM users WHERE username=? AND password=?',
    (username, password)  # parameters, never concatenated
)

Indatavalidering som försvar i flera lager

Även om parametriserade frågor är det främsta skyddet utgör indatavalidering ett viktigt sekundärt lager. Validering med allowlist godkänner endast förväntade tecken (till exempel enbart alfanumeriska tecken i ett användarnamnsfält) och avvisar allt annat. Validering med denylist blockerar kända skadliga tecken, men angripare kodar eller förvränger ofta payloads för att kringgå denylistor – därför är allowlistor betydligt starkare.

Vad är kommandeinjektion?

Kommandeinjektion (OS command injection) uppstår när en applikation skickar osanerad användarindata till ett systemskal. Till skillnad från SQL-injektion, som riktar sig mot databaser, riktar sig kommandeinjektion mot själva operativsystemet – vilket ger angripare möjlighet att köra godtyckliga kommandon med samma behörigheter som webbserverprocessen. Den bedöms ha kritisk allvarlighetsgrad och leder ofta till att hela systemet komprometteras.

Exempel på kommandeinjektion

En webbapp som pingar en IP-adress som användaren anger kan använda: ping -c 1 INPUT. Om en angripare anger 8.8.8.8; cat /etc/passwd tolkar skalet ; som en kommandoseparator och kör båda kommandona. Vanliga injektionsoperatorer är ;, &&, ||, | och ersättning av kommandon med backtick.

# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd'  # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)

# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])

Förhindra kommandeinjektion

Det säkraste skyddet mot kommandeinjektion är att helt undvika att anropa OS-kommandon från användarindata – använd biblioteksfunktioner som åstadkommer samma sak. När skalanrop inte kan undvikas ska argument skickas som en lista (aldrig som en sammanfogad sträng), skaltolkning inaktiveras, indata valideras mot en strikt allowlist och processer köras med ett användarkonto med så små behörigheter som möjligt.

OWASP-kontext: injektion i topp 10

OWASP:s topp 10 listar injektion (som omfattar SQL-, NoSQL-, OS- och LDAP-injektion) som en av de mest kritiska säkerhetsriskerna i applikationer. OWASP rekommenderar ett försvar på djupet: använd säkra API:er som undviker tolken, utför positiv indatavalidering (allowlist) på serversidan, escape:a specialtecken med den syntax som är specifik för tolken och använd SQL-kontroller som LIMIT för att förhindra massutlämning av data.

Detektering: WAF:er och loggning

En brandvägg för webbapplikationer (WAF) kan upptäcka och blockera vanliga injektionspayloads genom att inspektera HTTP-begäranden mot signaturmönster. WAF:er kan dock kringgås med hjälp av kodningsknep och ersätter inte säker kodning. Korrekt loggning av applikationen — där frågeparametrar, svarskoder och felmeddelanden registreras — gör det möjligt för säkerhetsteam att identifiera injektionsförsök vid incidentgranskning.

Injektionsattackers konsekvenser i verkligheten

Injektionsattacker har orsakat några av historiens största dataintrång. Intrånget hos Equifax 2017 exponerade 147 miljoner poster via en sårbarhet i en webbapplikation. En SQL-injektion mot Sony PlayStation Network äventyrade 77 miljoner konton 2011. Dessa incidenter visar att injektionssårbarheter får extrem verksamhetspåverkan: datastöld, myndighetsböter, skadat anseende och juridiskt ansvar följer alla efter en lyckad injektionsattack.

Snabbkontroll

Testa dina kunskaper om CompTIA Security+-begreppen (SY0-701) från den här lektionen.

Sammanfattning av lektionen

I den här lektionen lärde du dig att: SQL-injektion utnyttjar osanerad indata som sammanfogats med databasfrågor, kommandoinjektion skickar skadlig indata till OS-skalet via operatorer som ; och | och parametriserade frågor samt att undvika shell=True är de huvudsakliga försvaren. Härnäst går vi igenom Cross-Site Scripting (XSS) och CSRF-attacker.

Gratis att börja

Lär dig Cloud & IT Cert Prep 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
150
Lektioner
600

Vanliga frågor

Är lektionen ”SQL-injektion och kommandoinjektion” gratis?

Ja – hela texten till ”SQL-injektion och kommandoinjektion” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cloud & IT Cert Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.

Vad lär jag mig i ”SQL-injektion och kommandoinjektion”?

Lär dig hur angripare utformar injektionsnyttolaster som manipulerar databasfrågor eller operativsystemkommandon, och hur parametriserade frågor och indatavalidering förhindrar dem. Ni övar på Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Du behöver inga förkunskaper. Utbildningen i Cloud & IT Cert Prep 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 och kommandoinjektion”?

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 Cloud & IT Cert Prep-lektionen?

Ja. Varje Cloud & IT Cert Prep-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 och kommandoinjektion
  2. Cross-Site Scripting (XSS) och CSRF
  3. Bristande autentisering och osäker deserialisering
  4. Säker SDLC samt SAST- och DAST-verktyg
← Tillbaka till Cloud & IT Cert Prep