Я пытаюсь создать панель поиска, которая работает с несколькими словами, но я беспокоюсь о внедрении SQL.
Я использую node express с npm mssql пакет.
Вот код, который получает критерии, генерирует SQL и запускает его:
router
.get('/search/:criteria', function (req, res) {
var criteria = req.params.criteria;
var words = criteria.split(" ");
var x = ""
words.map(word => x += `name like '%${word}%' and `);
x = x.substring(0, x.length - 5); // Remove trailing 'and'
var query = `SELECT * FROM table WHERE ${x}`
new sql.ConnectionPool(db).connect().then(pool => {
return pool.request().query(query)
}).then(result => {
})
});
Поиск something to search
приведет к этому запросу:
SELECT * FROM table
WHERE
name like '%something%'
and name like '%to%'
and name like '%search%'
Я сам попробовал несколько SQL-инъекций, но ни одна из них, похоже, не работает.
Примечание : я знаю, что мы должны всегда использовать входы для этого.Это прекрасно работает для одного слова, но я не знаю, как использовать входные данные для многих слов.Пример:
new sql.ConnectionPool(db).connect().then(pool => {
return pool.request()
.input('input', '%'+criteria+'%')
.query(query)
})