为React网站防止Express / mssql API容易受到SQL注入攻击的最有效方法是什么?

问题描述 投票:0回答:1

我创建了一个基本的全栈应用程序,在其中我发现它非常容易受到SQL注入的攻击。

应用程序正在使用react,但后端本身由express / mssql npm软件包组成。

下面是我的server.js文件中的片段,描述了用户如何注册。但是,如果用户输入放置表语句或什至更糟的是放置数据库,则会损害整个系统。

Server.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 mssql文档中,它实际上谈论的是SQL注入和对此的内置预防(https://github.com/tediousjs/node-mssql#sql-injection

这里是文档中给出的示例

const request = new sql.Request()
request.input('myval', sql.VarChar, '-- commented')
request.query('select @myval as myval', (err, result) => {
    console.dir(result)
})

但是到目前为止,我对如何在代码中实现这一点的理解为空。

最佳做法是什么?进一步研究存储过程是一个更好的主意,还是可以将其应用于我的代码以成功阻止SQL注入的任何威胁?

node.js sql-server reactjs express
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.