【发布时间】:2020-11-21 03:43:05
【问题描述】:
就这个话题提出了几个问题。但我在任何地方都找不到确切的答案。 下面的代码会导致sql注入吗?如果是,如何逃脱?
db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + search + '%"', (err, result) => {
if (err) throw err
res.send(result)
})
我用mysql.escape() 尝试了下面的代码。但是在这种情况下 SQL 查询不起作用:
db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + mysql.escape(search) + '%"', (err, result) => {
if (err) throw err
res.send(result)
})
【问题讨论】:
-
尝试替换,大多数图书馆都有。最安全的方法是参数化查询,但当然更慢。
-
您希望它如何工作?
-
@AnonyMouze,参数化查询更慢?你测量过这个吗?
-
@BillKarwin 不确定数据库的执行情况,但在我使用的大多数语言中进行参数化查询都有额外的步骤。所以逻辑上比较慢。
-
在实践中,差异远小于查询执行时间。这不是避免使用参数化查询的好理由。
标签: mysql node.js security sql-injection