这条评论让我担心我搜索数据库的方式可能会导致注入攻击。下面是我当前使用的查询:
return db.query("SELECT * FROM customers WHERE ( num LIKE ? AND name LIKE ? )", [customer.num + "%", customer.name + "%"], callback)
我应该在对api的调用中添加%符号,还是应该如何正确实现?
mfpqipee1#
不,你误解了。当您将一个字符串与sql查询连接起来时,问题就出现了。例如 db.query("SELECT * FROM customers WHERE ( num LIKE "+ var +"AND name LIKE "+ var2+" )" . 你在这里是安全的,因为你使用的占位符将逃逸他们。
db.query("SELECT * FROM customers WHERE ( num LIKE "+ var +"AND name LIKE "+ var2+" )"
jtjikinw2#
您引用的注解使用字符串连接,而您使用的是准备好的语句这意味着意图是 db.query 函数应该对您提供的输入应用过滤和转义,希望它们相当广泛,并能很好地保护您。这并不意味着您对sqli攻击免疫,因为它们太多了,但是您在使用准备好的语句时遵循了良好的实践。要检查和/或提高针对sqli攻击的安全性,您可以:审核您正在使用的数据库连接器库,以查看它是否存在已知问题。 npm audit 你的朋友在吗考虑使用另一个系统进行查询,比如类似于orm的sequelize,它倾向于使用与实际sql进一步分离的查询系统。
db.query
npm audit
2条答案
按热度按时间mfpqipee1#
不,你误解了。当您将一个字符串与sql查询连接起来时,问题就出现了。例如
db.query("SELECT * FROM customers WHERE ( num LIKE "+ var +"AND name LIKE "+ var2+" )"
. 你在这里是安全的,因为你使用的占位符将逃逸他们。jtjikinw2#
您引用的注解使用字符串连接,而您使用的是准备好的语句
这意味着意图是
db.query
函数应该对您提供的输入应用过滤和转义,希望它们相当广泛,并能很好地保护您。这并不意味着您对sqli攻击免疫,因为它们太多了,但是您在使用准备好的语句时遵循了良好的实践。
要检查和/或提高针对sqli攻击的安全性,您可以:
审核您正在使用的数据库连接器库,以查看它是否存在已知问题。
npm audit
你的朋友在吗考虑使用另一个系统进行查询,比如类似于orm的sequelize,它倾向于使用与实际sql进一步分离的查询系统。