node.js - Sequelize model.build(req.body) 注入(inject)安全吗?

标签 node.js code-injection 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);
});

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

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 注入(inject)攻击的角度来看这是安全的,我仍然建议在调用 models.Account.create 之前使用第二种方法进行额外的验证步骤,以便您将已知值传递给 ORM,而不是 HTTP 请求正文中的任何内容(可以是任何内容,而不仅仅是您页面上的内容)

关于node.js - Sequelize model.build(req.body) 注入(inject)安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792847/

相关文章:

javascript - 为什么当我使用 koajs 时触发控制台两次

node.js - 杀死 bash 脚本不会杀死子进程

java - 注入(inject)功能的方式(类似于动态代理但侵入性较小)

java - 如何防止 java 应用程序中的帧注入(inject)(点击劫持)?

node.js - 如何在 Node js 中使用 Socket.io-client 连接两个 Socket.io Node 应用程序

在浏览器中注入(inject) Javascript

javascript - 获取嵌套的BelongsToMany关联

mysql - 使用多个线程执行多个 sequelize 查询

node.js - 无法读取未定义的属性 'menu_id'

node.js - Node Js : how to disable google account chooser and pass only one mail id