Injection-Angriffe gehören zu den ältesten und gefährlichsten Schwachstellen. Ein Angreifer schleust schädlichen Code in Eingabedaten ein, den die Anwendung ausführt.
Arten von Injection¶
- SQL Injection: Einschleusen von SQL-Code in Abfragen
- NoSQL Injection: Manipulation von MongoDB-Abfragen
- OS Command Injection: Ausführung von Systembefehlen
- LDAP Injection: Manipulation von LDAP-Abfragen
SQL Injection — Beispiel¶
FALSCH¶
query = f”SELECT * FROM users WHERE username = ‘{username}’“
Angreifer: username = admin’ –¶
RICHTIG — parametrisierte Abfrage¶
cursor.execute(“SELECT * FROM users WHERE username = %s”, (username,))
NoSQL Injection¶
// FALSCH — MongoDB db.users.find({ username: req.body.username, password: req.body.password }); // Angreifer: { “password”: { “$ne”: “” } } // RICHTIG const username = String(req.body.username);
OS Command Injection¶
FALSCH¶
os.system(f”ping {user_input}”)
RICHTIG¶
import subprocess subprocess.run([“ping”, “-c”, “4”, validated_ip], capture_output=True)
Prävention¶
- Parametrisierte Abfragen (Prepared Statements)
- Eingaben validieren (Whitelist > Blacklist)
- ORM (SQLAlchemy, Prisma, Entity Framework)
- Least-Privilege-DB-Konten
- WAF + SAST in CI/CD
Wichtigste Erkenntnis¶
Benutzereingaben niemals direkt in Abfragen einsetzen. Parametrisierte Abfragen und ORMs sind die wichtigste Verteidigung.