Можно ли предотвратить SQL-инъекции в Node.js (желательно с помощью модуля) так же, как в PHP были подготовленные операторы, защищающие от них.
Если да, то как? Если нет, то каковы некоторые примеры, которые могут обойти предоставленный мной код (см. Ниже).
Некоторый контекст:
Я создаю веб-приложение с внутренним стеком, состоящим из Node.js + MySql, с использованием модуля node-mysql . С точки зрения юзабилити, модуль является большим, но это еще не реализовано что - то похожее на РНР Подготовленные заявления (хотя я знаю , что это на TODO ).
Насколько я понимаю, реализация подготовленных операторов PHP, помимо прочего, очень помогла в предотвращении инъекций SQL. Однако меня беспокоит, что мое приложение node.js может быть открыто для подобных атак, даже с экранированием строки, предоставленным по умолчанию (как в фрагменте кода ниже).
node-mysql, кажется, является самым популярным соединителем mysql для node.js, поэтому мне было интересно, что другие люди могут делать (если что-то), чтобы учесть эту проблему - или это даже проблема с node.js для начала (не уверен, как это может быть, поскольку задействован ввод на стороне пользователя / клиента).
Должен ли я пока перейти на node-mysql-native , поскольку он предоставляет подготовленные операторы? Я не решаюсь сделать это, потому что он не кажется таким активным, как node-mysql (хотя это может просто означать, что он завершен).
Вот фрагмент кода регистрации пользователя, который использует модуль sanitizer вместе с синтаксисом, подобным подготовленному оператору 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?
});