在sequelize.js中使用构建方法时,是否需要验证,清理或转义数据?

时间:2015-09-27 13:59:01

标签: javascript node.js security express sequelize.js

我有一个节点/快递/续集应用程序。我在sequelize中使用构建方法来创建我的foo模型的实例。

Foo控制器

 exports.create = function(req, res) {
     var foo = db.Foo.build(req.body);
     foo.save().then(function(){
         // do stuff
     });
 }

Foo模型

module.exports = function(sequelize, DataTypes) {

var Foo = sequelize.define('Foo', 
{
  bar: DataTypes.STRING,
  baz: DataTypes.STRING
}

构建方法是否检查我保存的数据是否干净,或者我是否需要采取一些额外的预防措施?

1 个答案:

答案 0 :(得分:2)

我更喜欢在路线中进行二次验证,因为:

1)在数据库中存储数据是您可以使用此数据执行的众多操作之一。如果您只在数据库中验证,那么在其他地方您将获得未经验证的数据。例如,在将其保存在数据库中之前,您可能需要一些计算或连接。

2)或在许多路线中使用一个续集模型(例如客户路线和合作伙伴路线中的用户模型)并且您想要制定不同的验证规则。

我总是在续集模型中设置验证,但这是通过“最大允许条件”进行验证。 (例如,用户名字段永远不会大于200个字符,它是字符串)。我还做了路线验证。它更具体和具体(例如在客户路线中,用户名max large为100,但在合作伙伴路线中,用户名可能有150个字符,并且还检查此字符串的内容)。

最后,对您的问题的严格答案:续集验证主要用于验证格式。这还不够。看看我的回答NodeJS/express - security for public API endpoint 如果您在没有正确验证的情况下保存数据然后提供此数据,那么您将面临XSS攻击。