Какой самый эффективный способ предотвратить использование Express / ms sql API для веб-сайта реагирования, уязвимого для SQL Injection? - PullRequest
0 голосов
/ 08 января 2020

Я создал базовое 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 внедрения?

1 Ответ

0 голосов
/ 08 января 2020

Всем, кому интересно, похоже, это решает проблему

var email = body.email;
          var password = body.password;

          var queryString =
            "insert into Login (email,password) values (@email, @password)";
          request.input("email", sql.VarChar, email);
          request.input("password", sql.VarChar, password);

          request.query(queryString, function(err, recordset) {
            console.log(err);
            response.status(400);
          });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...