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