【问题标题】:Prevent SQL injection in api call防止 api 调用中的 SQL 注入
【发布时间】:2021-07-15 20:40:33
【问题描述】:

我有一个 React 项目。它有一个 PostgreSQL 数据库。我创建了 api 调用。我很确定我编写它的方式使它可以用于 SQL 注入。我怎样才能重写它可以避免这种情况?请记住,我有大量的 API 调用需要重写。


app.post("/comment/add", function (req, res) {
  let sqlquery = `INSERT INTO dbo.comments(
  eqid,empid,comment, createddate)
  VALUES ('${req.body.eqid}', '${req.body.empid}', '${req.body.comment}',now()
 
  ) RETURNING commid`;
try{
console.log(req.body)
  pool.query(sqlquery, (err, result) => {console.log(result , err)
    if (result.rowCount) {
      res.json({eqid:result.rows[0].eqid});
    }else {
      console.log(err);
      res.status(400).json({ error: "Error while adding comment" });
    }
  });
}catch(error){

}
  
});

【问题讨论】:

  • 您可以使用 参数化 技术避免 SQL 注入。这些技术是什么样的取决于您使用的数据访问技术。
  • 阅读 lib 上的文档,最有可能的是它的 pool.query(sqlquery, [req.body.eqid, req.body.empid, ...], (err, result) 和参数是 ?,但它可能是不同的。 SQL注入应该在你的脑海中,而不是事后的想法,你也不应该在后端代码中使用console.log,而是使用不输出到stdout的记录器
  • 是的,我知道它应该提前考虑,但这个项目不会投入生产,只是一个项目,但客户正在从我这里购买它。我现在需要最好的方法来处理手头的问题。我仍然是构建应用程序的新手,因此非常感谢任何卑微的帮助......

标签: node.js reactjs postgresql


【解决方案1】:

为您的参数添加验证(req.body、req.params 等),并仅在收到有效参数时才继续运行查询。

您可以为执行此操作的 api 构建自己的自定义中间件,或者使用其他服务,例如使用 express express-validator

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2011-06-12
    • 1970-01-01
    • 2011-04-30
    • 2013-02-28
    • 2011-04-25
    • 2013-03-24
    相关资源
    最近更新 更多