Как обрабатывать SQL-инъекцию в узловом модуле mssql

#sql-server #node.js #express

#sql-сервер #node.js #экспресс

Вопрос:

В проекте Expressjs я использую https://www.npmjs.com/package/mssql для подключения к Microsoft SQL Server и попытки выполнить хранимую процедуру. Согласно документации mssql (https://www.npmjs.com/package/mssql#sql-injection ) будет обрабатывать все SQL-инъекции, чего, я думаю, не происходит.

Может кто-нибудь помочь мне, как обрабатывать SQL-инъекции в этом узловом модуле?

 var sql = require('mssql');
var dbConfig = {};
var Connection = new sql.Connection(dbConfig);
Connection.connect().then(function(_connection){
    var request = new sql.Request(_connection);
    request.verbose = true;
    request.input('username', 'patriksimek');
    request.input('password', 'delete from dbo.Users where userId =1');
    request.input('attempts', 2);
    request.execute('my_stored_procedure');
})  

Заранее спасибо

Комментарии:

1. Опубликуйте свой код, который генерирует и выполняет команды SQL. Используете ли вы конкатенацию строк или параметры?

2. Используйте подготовленные инструкции. var ps = new sql.PreparedStatement(connection)

3. @Dai,, я обновил приведенный выше код.

4. @SwarajGiri, PreparedStatement выдает ошибку для строки с пробелом. пример «приветственное слово»

Ответ №1:

Вы используете хранимую процедуру, которая не может быть введена sql.

Вам не нужно ничего делать.

SQL-инъекция — это метод взлома путем передачи некоторого оператора SQL на сервер.

например, для кода

 'SELECT * FROM user WHERE username = '   username
  

если я пройду username = 'xxx; DELETE FROM user;' , все записи в таблице users исчезнут

Для защиты от SQL-инъекции

  1. используйте параметризацию запроса
  2. используйте хранимые процедуры (которые вы используете сейчас)