我是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
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请求正文中的任何内容(可能是任何内容,而不仅仅是页面上的内容)