Я создал базовое c приложение с полным стеком, в котором мне пришло в голову, что оно очень уязвимо для SQL инъекций.
Приложение использует реакцию, но сам сервер состоит из пакетов экспресс / ms sql npm.
Ниже приведен фрагмент моего сервера. js файл, описывающий, как пользователи будут регистрироваться. Однако, если бы пользователи вводили оператор отбрасывания таблицы или, что еще хуже, базу данных отбрасывания, это поставило бы под угрозу всю систему.
Сервер. js
app.post("/admin-Add-Users", async (req, response) => {
sql.connect(config, function(err) {
if (err) {
console.log(err);
response.status(400);
response.send(err);
} else {
try {
// create Request object
var request = new sql.Request();
var body = req.body;
console.log(body);
if (body) {
var email = body.email;
var password = body.password;
var queryString = `insert into Login (email,password) values ('${email}', '${password}')`;
console.log(queryString);
request.query(queryString, function(err, recordset) {
console.log(err);
response.status(400);
// response.send(err);
});
response.status(201);
response.send("User added ");
} else {
response.status(400);
response.send("no content was provided");
}
} catch (e) {
console.log(e);
response.status(400);
response.send(e);
}
}
});
});
Я понимаю, что хранимые процедуры безопасны от инъекций, но я новичок в этом и не знаю точно, с чего начать.
Однако в документации npm мс sql на самом деле говорится о sql инъекциях и встроенной профилактике для этого (https://github.com/tediousjs/node-mssql#sql -инъекция ).
Вот пример, приведенный в документации
const request = new sql.Request()
request.input('myval', sql.VarChar, '-- commented')
request.query('select @myval as myval', (err, result) => {
console.dir(result)
})
Однако с этого момента мое понимание того, как внедрить это в мой код равно нулю.
Каков наилучший курс действий? Лучше ли заглянуть дальше в хранимые процедуры или это можно применить к моему коду, успешно останавливая ЛЮБЫЕ угрозы SQL внедрения?