我的查询中的这个字符串连接会导致注入攻击吗?

x8diyxa7  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(302)

这条评论让我担心我搜索数据库的方式可能会导致注入攻击。下面是我当前使用的查询:

return db.query("SELECT * FROM customers 
                 WHERE ( num LIKE ? AND name LIKE ? )", 
                [customer.num + "%", customer.name + "%"], callback)

我应该在对api的调用中添加%符号,还是应该如何正确实现?

mfpqipee

mfpqipee1#

不,你误解了。当您将一个字符串与sql查询连接起来时,问题就出现了。例如 db.query("SELECT * FROM customers WHERE ( num LIKE "+ var +"AND name LIKE "+ var2+" )" . 你在这里是安全的,因为你使用的占位符将逃逸他们。

jtjikinw

jtjikinw2#

您引用的注解使用字符串连接,而您使用的是准备好的语句
这意味着意图是 db.query 函数应该对您提供的输入应用过滤和转义,希望它们相当广泛,并能很好地保护您。
这并不意味着您对sqli攻击免疫,因为它们太多了,但是您在使用准备好的语句时遵循了良好的实践。
要检查和/或提高针对sqli攻击的安全性,您可以:
审核您正在使用的数据库连接器库,以查看它是否存在已知问题。 npm audit 你的朋友在吗
考虑使用另一个系统进行查询,比如类似于orm的sequelize,它倾向于使用与实际sql进一步分离的查询系统。

相关问题