SQL injection je stará přes 25 let, ale stále patří mezi top zranitelnosti. Každý vývojář by měl vědět, jak se bránit.
Prepared statements v různých jazycích¶
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 vrstva¶
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ární obrana)
- ORM s parametrizací
- Input validace (whitelist)
- Least privilege DB účty
- WAF pravidla
- SAST skenování
Klíčový takeaway¶
Prepared statements jsou nepřekonatelná obrana. Používejte je vždy, ve všech jazycích, bez výjimky.