数据库
首页 > 数据库> > 转义knex mysql查询语句

转义knex mysql查询语句

作者:互联网

一般来说,我对knex和数据库还很陌生,所以这是一个初学者的问题.
我没有在knex docs中对此明确提及.
非原始knex查询是否自动“安全”?

其次,对于原始查询,我有几个类似于以下内容的原始语句:

var condition = _.map(ids, function(id) {
    return '`id`=' + id;
}).join(' OR ');

knex('categories')
    .whereRaw(condition)
    .select('*')
    .catch(_error.bind(null, cb))
    .then(function(res) { ... });

使用描述为here的函数在条件中转义id是否足以逃脱该查询?
在这种情况下还要注意什么?

解决方法:

所有knex查询都是安全的,如果使用参数绑定语法,knex.raw()查询也是安全的.被替换为转义值(http://knexjs.org/#Raw).

查询您正在做的查询最好不要原始,如下所示

knex('categories').whereIn('id', ids).catch(...).then(...);

如果要使用自动转义列引用(也称为标识符),则可以使用whereRaw(‘?? =?’,[‘id’,value]),将第一部分作为标识符转义,第二部分作为值转义.

因此,使用参数转义您的示例将是这样的:

var condition = _.map(ids, function() {
    return '?? = ?';
}).join(' OR ');

var conditionParameters = _.flatten(_.map(ids, function(id) {
    return ['id', id];
}));

knex('categories')
    .whereRaw(condition, conditionParameters)
    .select('*')
    .catch(_error.bind(null, cb))
    .then(function(res) { ... });

但是我不得不说,在knex中进行查询总是比使用这种原始条件更好的方法.

标签:knex-js,escaping,database-security,mysql,database
来源: https://codeday.me/bug/20191027/1943987.html