SQL Injection ist über 25 Jahre alt, gehört aber immer noch zu den häufigsten Schwachstellen. Jeder Entwickler sollte wissen, wie man sich dagegen schützt.
Prepared Statements in verschiedenen Sprachen¶
SQL Injection Prävention — Ein vollständiger Leitfaden¶
cursor.execute(“SELECT * FROM users WHERE email = %s”, (email,))
Node.js + pg¶
const result = await pool.query(‘SELECT * FROM users WHERE email = $1’, [email]);
Java + JDBC¶
PreparedStatement stmt = conn.prepareStatement(“SELECT * FROM users WHERE email = ?”); stmt.setString(1, email);
Go + database/sql¶
row := db.QueryRow(“SELECT * FROM users WHERE email = $1”, email)
C# + Dapper¶
var user = conn.QueryFirst
ORM-Schicht¶
SQLAlchemy¶
user = session.query(User).filter(User.email == email).first()
Prisma¶
const user = await prisma.user.findUnique({ where: { email } });
Entity Framework¶
var user = context.Users.FirstOrDefault(u => u.Email == email);
Defense in Depth¶
- Prepared Statements (primäre Verteidigung)
- ORM mit Parametrisierung
- Eingabevalidierung (Whitelist)
- Least Privilege DB-Konten
- WAF-Regeln
- SAST-Scanning
Wichtigste Erkenntnis¶
Prepared Statements sind die unübertreffliche Verteidigung. Verwenden Sie sie immer, in allen Sprachen, ohne Ausnahme.