Sequelize model.build(req.body) 注射安全吗?

Hen*_*Jan 5 code-injection node.js sequelize.js

我是 Sequelize(一个 node.js ORM)的新手,想知道以下代码是否安全:

var models = require('../models');
var router = require('express').Router();

router.post('/', function(req, res, next){
  models.Account
    .create(req.body)       // <-- THIS IS WHAT MY QUESTION IS ABOUT, IS THIS SAFE?
    .then(function(result){
      res.status(200)
        .send(result)
        .end();
    }).catch(next);
});
Run Code Online (Sandbox Code Playgroud)

如果您正在使用它,这在某些方面是否不安全?另一种解决方案是:

var models = require('../models');
var router = require('express').Router();

router.post('/', function(req, res, next){
  models.Account
    .create({
      username:    req.body.username, // <-- THIS IS MORE VERBOSE BUT PROBABLY SAFER?
      accountname: req.body.accountname,
      level:       req.body.level
    })
    .then(function(result){
      res.status(200)
        .send(result)
        .end();
    }).catch(next);
});
Run Code Online (Sandbox Code Playgroud)

所以基本上我的问题是:使用完整的请求正文作为model.create()函数(model.set()model.build())的输入是否安全?

Col*_*kay 2

作为一般规则,在将数据传递给任何持久性技术之前,您应该验证输入以查看它对于您的域是否安全。因此,即使从 SQL 注入攻击的角度来看这是安全的,我仍然建议在调用之前使用第二种方法进行额外的验证步骤,models.Account.create以便将已知值传递给 ORM,而不是任何已经发生的值在 HTTP 请求的正文中(可以是任何内容,而不仅仅是页面上的内容)