Projekt: SQL Injection Demonstration & Gegenmaßnahmen
Autoren: Altin Demku, Manuel Bürki, Victor Peski
Datum: 2025-10-29
Kurzbeschreibung:
Dieses Repository enthält eine Lernumgebung, die verschiedene Implementierungen eines Login‑Endpoints demonstriert: eine absichtlich unsichere Variante (unsecure.js) und eine sichere Variante (secure.js) welche Prepared Statements / Stored Procedure verwendet. Zusätzlich ist db.js enthalten, das die Verbindung zur MySQL‑Datenbank konfiguriert. Die SQL‑Datenbank‑Initialisierung (Schema + Testdaten + Stored Procedure) liegt als schema.sql bei.
- Node.js (>= 16 empfohlen)
- MySQL Server (lokal oder remote)
npm installim Projektverzeichnis
Umgebungsvariablen in .env (Beispiel):
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=secret
DB_NAME=SQL_injection
unsecure.js— bewusst verwundbare Implementation (String‑Concatenation SQL).secure.js— sichere Implementation, ruft Stored Procedurelogin_user(in_name, in_pass)parametrisiert auf.db.js— DB‑Pool Konfiguration (nutztmysql2/promise).SQL— enthält DDL, INSERTs und die Stored Procedure.attackdeffendscript.json- JSON-Datei um die Sicherheit/Unsicherheit zu testenREADME.md— diese Datei.
- MySQL starten.
SQLausführen (z. B. mit MySQL Workbench odermysql -u root -p < SQL).- Prüfen, dass Stored Procedure
login_userexistiert:
SHOW PROCEDURE STATUS WHERE Name = 'login_user';- Abhängigkeiten installieren:
npm install.envanlegen (s. oben).- Server starten:
node secure.js
# oder für die unsichere Variante:
node unsecure.jsStandardport: http://localhost:3000
-
Admin Login (funktional):
- POST
http://localhost:3000/login - Body (x‑www‑form‑urlencoded):
username=Admin,password=1234 - Erwartung (secure):
200+{ role: "admin" ... }
- POST
-
SQLi Versuch (muss fehlschlagen im secure):
- POST
http://localhost:3000/login - Body:
username=Admin' --,password=whatever(oderpassword=' OR '1'='1) - Erwartung secure:
401/400— kein 200
- POST
- Altin Demku
- Manuel Bürki
- Victor Peski