Sequelize: escape-строка в буквальной строке - PullRequest
0 голосов
/ 29 октября 2019

Я могу использовать literal в Sequelize, чтобы вручную построить часть SQL-запроса:

sequelize.literal(`"foo".bar ILIKE '%baz%'`)

Но если я хочу добавить переменную в этот литеральный блок, я сейчас представлюУязвимость внедрения SQL:

sequelize.literal(`"foo".name ILIKE '%${myVar}%'`)

Существует ли способ Sequelize для защиты переменных в литеральных блоках?

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Вы можете использовать replacements и ?, чтобы избежать инъекций sql:

sequelize.query(`"foo".name ILIKE '%?%'`,
  { replacements: [myVar], type: sequelize.QueryTypes.SELECT }
)
0 голосов
/ 12 ноября 2019

Вы можете использовать escape:

const escapedSearch = sequelize.escape(`%${myVar}%`);
sequelize.literal(`"foo".name ILIKE ${escapedSearch}`);

См .: https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-escape

0 голосов
/ 29 октября 2019

попробуй

description = {
    $like: sequelize.literal(`${myVar} ESCAPE '\\'`)
};
...