【发布时间】:2020-10-27 02:12:05
【问题描述】:
我正在尝试使用此 JavaScript 在我的 sqlite3 数据库中进行基本搜索:
function search(query) {
let sql = `SELECT * from tracks WHERE title LIKE '%${query}%'`
db.sqlite.all(sql, [], (err, rows) => {
console.log(rows)
})
}
这可行,但容易受到 SQL 注入的攻击。我正在尝试使 sqlite 替换参数起作用,但我无法正确使用语法。 Sqlite 不想替换字符串文字中的任何内容。
// throws SQLITE_RANGE error
let sql = `SELECT * from tracks WHERE title LIKE '%$query%'`
db.sqlite.all(sql, {$query: query}, (err, rows) => {})
编写此代码的正确方法是什么,使其不易受到 SQL 注入的影响?
【问题讨论】:
-
我的第一次搜索尝试在这里登陆:stackoverflow.com/questions/51997182/… 可以在哪里找到解决方案... LIKE ${query} ...在问这里问题之前先搜索怎么样 ;-)?跨度>
-
不要将 qoutes 和百分号放在参数名称周围,例如
'%$query%'应该只是$query、sqlite module docs -
@BitLauncher 您的链接仅涵盖安全输入,因此对我不起作用。
-
@PatrickEvans 这确实有效,但我如何使它与 %'s 一起工作?
-
它们需要成为
query本身的值的一部分,例如query = '%yourvalue%'
标签: javascript sql node.js sqlite