#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-инъекции
- используйте параметризацию запроса
- используйте хранимые процедуры (которые вы используете сейчас)