В настоящее время я создаю динамический запрос, используя приведенный ниже фрагмент кода:
var conditions = `AND 1 = 1`;
if (params.AssignedUserId) {
conditions += `AND x.AssignedUserId = ${params.AssignedUserId}`;
}
return dbc.then(pool => {
return pool.request()
.input('ClientId', sql.Int, ClientId)
.query(`SELECT *
FROM ${db.Enquiry}.Customers x
WHERE x.ClientId = @ClientId
${conditions}`)
}).then(result => {
return result.recordset;
}).catch(err => {
console.error(err);
});
Это отлично работает, однако основная проблема заключается в том, что params.AssignedUserId не дезинфицирован, есть ли способ вместо этого добавить значение в качестве входного параметра?
Что-то, чтобы я мог переписать это так:
if (params.AssignedUserId) {
conditions += `AND x.AssignedUserId = @AssignedUserId`;
// Something to add as input param to query
.input('AssignedUserId', sql.Int, AssignedUserId)
}
Затем это будет защищено от SQL-инъекций.
Альтернативой было бы использование третьей частичной библиотеки под названием node-sanitize для очистки каждого параметра, но кажется излишним, тем более что node-mssql имеет возможность сделать это