Чи можна запобігти ін'єкціям SQL в Node.js (бажано за допомогою модуля) так само, як PHP підготував заяви, які захищали від них.
Якщо так, то як? Якщо ні, то які приклади можуть обійти код, який я надав (див. Нижче).
Деякий контекст:
Я роблю веб-додаток із внутрішнім стеком, що складається з Node.js + MySql, використовуючи модуль node-mysql . З точки зору юзабіліті, модуль чудовий, але він ще не реалізував щось подібне до підготовлених заяв PHP (хоча я знаю, що це вже зроблено ).
Наскільки я розумію, реалізація PHP підготовлених заяв, серед іншого, значно допомогла у запобіганні ін'єкціям SQL. Однак я переживаю, що моя програма node.js може бути відкрита для подібних атак, навіть якщо рядок вимкнено за замовчуванням (як у фрагменті коду нижче).
node-mysql, здається, є найпопулярнішим з'єднувачем mysql для node.js, тому мені було цікаво, що можуть робити інші люди (якщо взагалі щось), щоб пояснити цю проблему - або якщо це навіть проблема з node.js для початку (не впевнений, як цього не було б, оскільки задіяно введення з боку користувача / клієнта).
Чи слід мені перейти на node-mysql-native , поки він надає підготовлені оператори? Я вагаюся це зробити, тому що це, здається, не настільки активне, як node-mysql (хоча це може просто означати, що воно завершено).
Ось фрагмент коду реєстрації користувача, який використовує модуль дезінфікуючого засобу разом із підготовленим синтаксисом, схожим на node-mysql (який, як я вже згадував вище, робить екранування символів), щоб запобігти міжсайтовим сценаріям та ін'єкціям sql відповідно:
// Prevent xss
var clean_user = sanitizer.sanitize(username);
// assume password is hashed already
var post = {Username: clean_user, Password: hash};
// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
function(err, results)
{
// Can a Sql injection happen here?
});