Injection útoky patří mezi nejstarší a nejnebezpečnější zranitelnosti. Útočník vkládá škodlivý kód do vstupních dat, který aplikace vykoná.
Typy injection¶
- SQL injection: Vložení SQL kódu do dotazu
- NoSQL injection: Manipulace MongoDB dotazů
- OS command injection: Spuštění systémových příkazů
- LDAP injection: Manipulace LDAP dotazů
SQL Injection — příklad¶
❌ ŠPATN̶
query = f”SELECT * FROM users WHERE username = ‘{username}’“
Útočník: username = admin’ –¶
✅ SPRÁVNĚ — parametrizovaný dotaz¶
cursor.execute(“SELECT * FROM users WHERE username = %s”, (username,))
NoSQL Injection¶
// ❌ ŠPATNĚ — MongoDB db.users.find({ username: req.body.username, password: req.body.password }); // Útočník: { “password”: { “$ne”: “” } } // ✅ SPRÁVNĚ const username = String(req.body.username);
OS Command Injection¶
❌ ŠPATN̶
os.system(f”ping {user_input}”)
✅ SPRÁVN̶
import subprocess subprocess.run([“ping”, “-c”, “4”, validated_ip], capture_output=True)
Prevence¶
- Parametrizované dotazy (prepared statements)
- Validujte vstupy (whitelist > blacklist)
- ORM (SQLAlchemy, Prisma, Entity Framework)
- Least privilege DB účty
- WAF + SAST v CI/CD
Klíčový takeaway¶
Nikdy nevkládejte uživatelský vstup přímo do dotazů. Parametrizované dotazy a ORM jsou hlavní obrana.