#database
Використання template string під час створення SQL запитів може стати причиною SQL ін'єкції. Нехай у нас є такий код:
client.query(`INSERT INTO users(name, email) VALUES('${name}', '${email}') RETURNING *`);Наприклад, порівняйте результати його виконання з
const name = 'Homer';const email = 'homer@simpson.com';та
const name = 'Hacker';const email = "hacker@simpson.com'); DELETE FROM users --";Звичайно, валідація вхідних даних може запобігти ін'єкції SQL. Однак правильно не використовувати у запитах JS змінні, а параметри.
Виправлений код виглядає так:
client.query('INSERT INTO users(name, email) VALUES($1, $2) RETURNING *', [name, email]);Усі query builders генерують такі запити, а DB клієнти вміють із ними працювати.