How to Prevent SQL Injection Attacks
Advertisement
Ad
What is SQL Injection?
SQL injection is when attackers insert malicious SQL through user input to read, modify, or delete your database. It's one of the oldest and most dangerous web vulnerabilities.
How an Attack Works
// Vulnerable code
"SELECT * FROM users WHERE email = '" + input + "'"
// Attacker enters: ' OR '1'='1
// Resulting query returns ALL users:
SELECT * FROM users WHERE email = '' OR '1'='1'
Fix 1: Parameterized Queries (Best)
// Node.js / MySQL
db.query("SELECT * FROM users WHERE email = ?", [email]);
// Python
cursor.execute("SELECT * FROM users WHERE email = %s", (email,))
Fix 2: Use an ORM
// ORMs auto-escape input
User.findOne({ where: { email } }); // Sequelize
db.users.find({ email }); // MongoDB
Fix 3: Validate Input
- Whitelist allowed characters.
- Check data types and lengths.
- Reject suspicious patterns.
Additional Defenses
- Least-privilege database accounts.
- Never show raw DB errors to users.
- Use a Web Application Firewall.
FAQs
Do ORMs fully prevent injection?
Mostly — but avoid raw queries with concatenated input even in ORMs. More in our Security guides.
Is SQL injection still common?
Sadly yes — it remains a top OWASP risk.
