Skip to main content
  1. Blogposts/

Databaser & sql-injektion: en guide för nybörjare och utvecklare 📝

·617 words·3 mins· loading · · ·
Rasmus
Author
Rasmus
Att dela en ide eller två kan vara bra för hjärnan
Table of Contents

Tänk dig en bibliotekskatalog där någon kan ändra sökningen för att plocka ut böcker utan att bibliotekarien märker något. Det är ungefär så SQL-injektion fungerar – ett av de vanligaste och farligaste säkerhetshålen i webbapplikationer.

I den här guiden utforskar vi databaser, SQL och hur du skyddar dig mot attacker. Oavsett om du är nyfiken, utvecklare eller IT-säkerhetsintresserad – här får du kunskap du kan använda direkt.


Vad är en databas?
#

En databas är som en digital arkivlåda där information lagras strukturerat. När du loggar in på en webbplats, läser nyheter eller handlar online, hämtas data från en databas i realtid.

Tretaktsarkitektur – Så fungerar det bakom kulisserna
#

  1. Användargränssnitt (Tier 1) – Webbläsaren eller appen du ser.
  2. Applikationsserver (Tier 2) – Tolkar din förfrågan (t.ex. “Visa mina senaste köp”).
  3. Databas (Tier 3) – Letar upp informationen och skickar tillbaka den.

Exempel: När du söker efter en produkt på en e-handelssida, skickas en fråga till databasen som returnerar matchande resultat.


Vad är SQL-injektion (SQLi)?
#

En SQL-injektion inträffar när en angripare manipulerar en databasfråga genom att injicera skadlig kod. Det är som att ge en falsk order till bibliotekarien som låter dem ta ut alla böcker – inte bara de du har rätt till.

Vad kan en angripare göra?
#

Hämta känslig data – Lösenord, personuppgifter, betalningsinformation. ✅ Bypassa inloggning – Logga in som admin utan lösenord med admin'--. ✅ Ta kontroll över systemet – I extrema fall kan hela servern äventyras.

Exempel på attack: Om en inloggningsruta inte sanerar input korrekt kan någon skriva:

användarnamn: admin'--
lösenord: [vad som helst]

Detta kommenterar bort lösenordskontrollen och loggar in angriparen som admin!


Typer av databaser: Relationsdatabaser vs NoSQL
#

Relationsdatabaser (MySQL, PostgreSQL)
#

  • Använder tabeller med kolumner och rader (tänk Excel på steroider).
  • Data länkas via relationer (t.ex. user_id kopplar användare till deras inlägg).
  • Fördelar: Strukturerat, snabbt för komplexa frågor.

Exempel på tabellrelation:

users                     posts
-------                  -------
id | name                id | user_id | content
1  | Alice               1  | 1       | Hej världen!

Icke-relationsdatabaser (NoSQL: MongoDB, Redis)
#

  • Lagrar data flexibelt, ofta som JSON-dokument eller nyckel-värde-par.
  • Fördelar: Skalar bra, bra för ostrukturerad data (t.ex. sociala medier).
  • Nackdelar: Svårare att köra komplexa frågor jämfört med SQL.

Introduktion till MySQL och SQL-grunder
#

Grundläggande SQL-kommandon
#

Kommando Beskrivning Exempel
CREATE DATABASE Skapar en databas CREATE DATABASE webshop;
USE Väljer databas USE webshop;
CREATE TABLE Skapar en tabell Se exempel nedan
SELECT Hämtar data SELECT * FROM users;

Exempel på tabellskapande
#

CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    created_at DATETIME DEFAULT NOW(),
    PRIMARY KEY (id)
);
  • AUTO_INCREMENT: Ökar ID automatiskt för varje ny rad.
  • UNIQUE: Användarnamnet måste vara unikt.
  • DEFAULT NOW(): Sätter dagens datum/tid som standardvärde.

Skydd mot SQL-injektion – Så gör du rätt
#

1️⃣ Använd Prepared Statements
#

Istället för att stoppa in användardata direkt i frågan:

// DÅLIGT: Öppet för SQLi!
$query = "SELECT * FROM users WHERE username = '$username'";

Använd parametriserade frågor:

// SÄKERT: Data hanteras separat från frågan
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);

2️⃣ Validera och sanera input
#

  • Kontrollera att e-postadresser ser ut som e-postadresser.
  • Använd funktioner som mysqli_real_escape_string() (men lita inte enbart på detta!).

3️⃣ Principen om minsta behörighet
#

Ge databasanvändaren endast de rättigheter den behöver – aldrig full åtkomst!


Avslutning: Bygg säkert från början!
#

SQL-injektion är ett av de mest utnyttjade säkerhetshålen men också ett av de lättaste att skydda sig mot med rätt kunskap. Genom att använda prepared statements, validera input och begränsa behörigheter kan du minska riskerna dramatiskt.

Vad gör din organisation för att skydda sig mot SQLi? Dela dina tankar eller ställ frågor i kommentarerna! 🔒