SQL Injection
SQL queries built with template literals or string concat (ORM-aware)
criticalSecurity
sql-injectionWhy this matters
String-concatenated SQL lets attackers inject arbitrary queries. They can dump your entire database, modify data, or escalate privileges. ORMs prevent this by parameterizing automatically.
✗ Bad
app.get("/users", async (req, res) => {
const { name } = req.query;
const result = await db.query(
`SELECT * FROM users WHERE name = '${name}'`
);
res.json(result.rows);
});✓ Good
app.get("/users", async (req, res) => {
const { name } = req.query;
const result = await db.query(
"SELECT * FROM users WHERE name = $1",
[name]
);
res.json(result.rows);
});How to fix
Always use parameterized queries or an ORM (Prisma, Drizzle, Knex). Never interpolate user input into SQL strings.