Vad är SQL-injektion (SQLi)?
SQL-injektion (SQLi) är en typ av attack där angripare matar in skadlig SQL-sats i ett inmatningsfält för att manipulera databasen.
Denna attack riktar sig mot applikationer som inte hanterar validering och användarinmatning korrekt, vilket möjliggör obehörig åtkomst till känslig data såsom lösenord eller kreditkortsuppgifter, etc.
Hur SQL-injektion fungerar
När en applikation direkt inkluderar användarinmatning i en databasfråga utan korrekt validering, kan angripare ändra frågans beteende för att mata in en skadlig SQL-sats.
Till exempel:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
En angripare skulle kunna mata in:
' OR '1'='1
Resulterande i:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Detta returnerar alltid sant, vilket ger obehörig åtkomst.
Varför SQL-injektion är viktigt inom cybersäkerhet
SQL-injektion är den farligaste och äldsta tekniken inom cybersäkerhet. Denna typ av attack listas konsekvent i OWASP Top 10.
Även små sårbarheter tillåter en angripare att:
- Åtkomst, ändra eller ta bort data
- Förbikoppla autentisering
- Utföra administrativa operationer på databasen.
- Kompromettera hela systemet.
Vanliga typer av SQL-injektion
- Klassisk SQLi : Direkt injektion via webbformulär eller URL-parametrar.
- Blind SQLi : Angripare härleder databasinformation indirekt (t.ex. via felmeddelanden eller svarstid).
- Union-baserad SQLi : Använder UNION-operatören för att kombinera resultat från flera frågor.
- Felbaserad SQLi : Förlitar sig på databasfelmeddelanden för att extrahera information.
- Tidsbaserad Blind SQLi : Utnyttjar serverns svarsfördröjningar för att gissa frågeresultat.
Hur man förhindrar SQL-injektion
1. Använd parameteriserade frågor (Förberedda uttalanden)
Säkerställ att SQL-kommandon behandlar användarinmatning som data, inte exekverbar kod.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Inmatningsvalidering och sanering
Validera all inmatning från användare, tillåt endast förväntade tecken.
3. Använd ORM-ramverk
Ramverk som Prisma, Hibernate, etc, minskar direkt hantering av SQL.
4. Principen om minst privilegium
Begränsa användarbehörigheter, ge endast den behörighet som behövs.
5. Regelbunden säkerhetstestning
Använd verktyg för applikationssäkerhetstestning som SAST, DAST eller IAST för att upptäcka injektionsbrister tidigt.
Exempel i verkligheten
En webbplats för en nätbutik drabbades av ett intrång där angripare använde en SQL-injektion i ett inloggningsformulär för att extrahera kreditkortsuppgifter från dess databas.