Veiligheid

Twee regels houden je database veilig: plak nooit invoer in je SQL en deel nooit je inloggegevens.

1. Voorkom SQL-injectie

Als je gebruikersinvoer direct in een query plakt, kan iemand je database overnemen. Dit is fout:

php
// FOUT — open voor SQL-injectie
$pdo->query("SELECT * FROM users WHERE naam = '" . $_GET['naam'] . "'");

Iemand kan dan naam=' OR '1'='1 meesturen en alle rijen zien. Gebruik in plaats daarvan prepared statements met placeholders:

php
// GOED — de waarde wordt veilig ingevuld
$stmt = $pdo->prepare("SELECT * FROM users WHERE naam = ?");
$stmt->execute([$_GET['naam']]);

Hetzelfde principe in elke taal:

TaalVeilig
PHP (PDO)$pdo->prepare("... WHERE id = ?")
Node (mysql2)pool.execute("... WHERE id = ?", [id])
Pythoncursor.execute("... WHERE id = %s", (id,))
Godb.Query("... WHERE id = ?", id)
Nooit waarden in de string bouwen
Als je een variabele in de SQL-tekst ziet staan (met ., +, ${...}, f"..." of Sprintf), is het waarschijnlijk onveilig. Gebruik placeholders.

2. Houd je inloggegevens geheim

  • Lees database-gegevens altijd uit de omgevingsvariabelen (DB_HOST, DB_USER, …). Die staan automatisch klaar zodra je database aan je app is gekoppeld.
  • Zet nooit wachtwoorden in je code of in een bestand dat je naar GitHub pusht.
  • Gebruik je lokaal een .env-bestand? Zet het in je .gitignore:
text
# .gitignore
.env
.env.local
Inloggegevens gelekt?
Per ongeluk je wachtwoord gepusht? Open je database onder Cloud → Databases en klik op Nieuwe inloggegevens. Het oude wachtwoord werkt dan niet meer.

3. Geef alleen wat nodig is

Toon nooit ruwe databasefouten aan bezoekers (ze kunnen je tabelnamen lekken). Log de fout en toon een nette melding:

php
try {
    // queries
} catch (PDOException $e) {
    error_log($e->getMessage());   // voor jou
    http_response_code(500);
    echo "Er ging iets mis.";       // voor de bezoeker
}