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¶
Python + psycopg2¶
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.