Sequelize model.build(req.body) 注射安全吗?
Is Sequelize model.build(req.body) safe for injections?
我是 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);
});
如果您正在使用它,它会不会在某些方面不安全?
另一个解决方案是:
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);
});
所以基本上我的问题是:使用完整的请求正文作为 model.create()
函数(以及 model.set()
和 model.build()
)的输入是否安全?
作为一般规则,在将数据传递给任何持久性技术之前,您应该验证输入以查看它对您的域是否安全。因此,即使从 SQL 注入攻击的角度来看这是安全的,我仍然建议在调用 models.Account.create
之前使用第二种方法进行额外的验证步骤,以便您传递已知值到 ORM,而不是 HTTP 请求正文中的任何内容(可以是任何内容,而不仅仅是您页面上的内容)
我是 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);
});
如果您正在使用它,它会不会在某些方面不安全? 另一个解决方案是:
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);
});
所以基本上我的问题是:使用完整的请求正文作为 model.create()
函数(以及 model.set()
和 model.build()
)的输入是否安全?
作为一般规则,在将数据传递给任何持久性技术之前,您应该验证输入以查看它对您的域是否安全。因此,即使从 SQL 注入攻击的角度来看这是安全的,我仍然建议在调用 models.Account.create
之前使用第二种方法进行额外的验证步骤,以便您传递已知值到 ORM,而不是 HTTP 请求正文中的任何内容(可以是任何内容,而不仅仅是您页面上的内容)