在 sequelize.js 中使用构建方法时是否需要验证、清理或转义数据
Do I need to validate, sanitise or escape data when using the build method in sequelize.js
我有一个 node/express/sequelize 应用程序。我在 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) 将数据存储在数据库中是您可以对这些数据执行的众多操作之一。如果您只在数据库中进行验证,那么在其他地方您将获得未经验证的数据。例如,在将其保存到数据库之前,您可能需要进行一些计算或连接。
2) 或者当你在多个路由中使用一个sequelize模型时(例如客户路由和合作伙伴路由中的用户模型)并且你想制定不同的验证规则。
我总是在 sequelize 模型中设置验证,但这是使用 'maximum allowable conditions' 进行验证(例如,用户名字段永远不会大于 200 个字符,并且它是字符串)。我也进行路线验证。它更具体和具体(例如,在客户路径中,用户名最大为 100,但在合作伙伴路径中,用户名可能有 150 个字符,并且还要检查此字符串的内容)。
最后,严格回答您的问题:sequelize 验证主要用于验证格式。这还不够。看我的回答
如果您在没有正确验证的情况下保存数据,然后提供这些数据,那么您将面临 XSS 攻击。
我有一个 node/express/sequelize 应用程序。我在 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) 将数据存储在数据库中是您可以对这些数据执行的众多操作之一。如果您只在数据库中进行验证,那么在其他地方您将获得未经验证的数据。例如,在将其保存到数据库之前,您可能需要进行一些计算或连接。
2) 或者当你在多个路由中使用一个sequelize模型时(例如客户路由和合作伙伴路由中的用户模型)并且你想制定不同的验证规则。
我总是在 sequelize 模型中设置验证,但这是使用 'maximum allowable conditions' 进行验证(例如,用户名字段永远不会大于 200 个字符,并且它是字符串)。我也进行路线验证。它更具体和具体(例如,在客户路径中,用户名最大为 100,但在合作伙伴路径中,用户名可能有 150 个字符,并且还要检查此字符串的内容)。
最后,严格回答您的问题:sequelize 验证主要用于验证格式。这还不够。看我的回答