【问题标题】:Validation in express Rest Apis快速 Rest API 中的验证
【发布时间】:2019-01-11 06:20:40
【问题描述】:

我在 Rest api 中使用 expressjs 将注册值保存到数据库中,但是我如何评估我的字段(姓名、电子邮件、密码),所以如果我在没有数据的情况下保存,则应该显示与字段相关的错误消息 这是我的代码

var mysql = require('mysql');
    var con = mysql.createConnection({
     host: "localhost",
      user: "root",
      password: "",
      database: "mydb"
    });

    var toTime = new Date();

      con.connect(function(err) {
      if (err) throw err;
      console.log("Connected!");
      var sql = "INSERT INTO users (name, email,password) VALUES ('"+req.body.name+"','"+req.body.email+"','"+req.body.password+"')";
      con.query(sql, function (err, result) {
        if (err) throw err;
        console.log("1 record inserted");
         });
    });

【问题讨论】:

  • 附带说明:您对使用此类非参数化查询的 SQL 注入非常开放。
  • @JayGould:不明白你的意思,请解释一下
  • "+req.body.name+" 如果有人在body.name 中输入一条SQL 语句并转义您当前的语句并注入他们自己的SQL 怎么办?在此处阅读更多信息:w3schools.com/sql/sql_injection.asp
  • @JayGoulud :理解你的意思,我会改变我的代码,但是有什么解决办法呢?
  • 您应该在将参数发送到 SQL 服务器之前验证它们。同样如建议的那样,此验证应检查注入攻击

标签: mysql node.js express


【解决方案1】:

第一个注意事项:您的代码容易受到 SQL 注入的影响。参考:this SO question

现在,您可以创建一个返回 boolean 的验证函数并在查询之前使用它

function validateFunc(...params){
    return params.reduce((p,c)=> p && (c !== null && c !== undefined), true);
}

并像使用它一样,

if(!validateFunc(req.body.name, req.body.email, req.body.password)){
    // throw some error 
}
var sql = "INSERT INTO users (name, email,password) VALUES ('"+req.body.name+"','"+req.body.email+"','"+req.body.password+"')";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2018-06-01
    • 2014-05-04
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多