#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
5 min read
Question 24 of 29hard

What is SQL injection and how to prevent it?

SQL security best practices.

What You'll Learn

  • What SQL injection is
  • Attack examples
  • Prevention techniques

What is SQL Injection?

SQL injection is an attack where malicious SQL is inserted into application queries.

Attack Examples

query.sqlSQL
-- Vulnerable code
query = "SELECT * FROM users WHERE email = '" + userInput + "'";

-- User enters: ' OR '1'='1
-- Resulting query:
SELECT * FROM users WHERE email = '' OR '1'='1';
-- Returns ALL users!

-- User enters: '; DROP TABLE users; --
-- Resulting query:
SELECT * FROM users WHERE email = ''; DROP TABLE users; --';
-- Deletes the entire table!

Prevention: Parameterized Queries

code.jsJavaScript
// Node.js with MySQL
const sql = 'SELECT * FROM users WHERE email = ?';
connection.query(sql, [userEmail], callback);

// Node.js with PostgreSQL
const sql = 'SELECT * FROM users WHERE email = $1';
client.query(sql, [userEmail]);

// Python with psycopg2
cursor.execute("SELECT * FROM users WHERE email = %s", (user_email,))

Prevention: ORM/Query Builders

code.jsJavaScript
// Sequelize
User.findAll({ where: { email: userEmail } });

// Prisma
prisma.user.findMany({ where: { email: userEmail } });

// Knex.js
knex('users').where('email', userEmail);

Prevention: Input Validation

code.jsJavaScript
// Validate input type and format
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(userInput)) {
  throw new Error('Invalid email');
}

// Escape special characters (last resort)
const escaped = mysql.escape(userInput);

Other Best Practices

  • Use least privilege database accounts
  • Don't expose detailed error messages
  • Use Web Application Firewalls (WAF)
  • Regular security audits
  • Keep software updated