它提到knex(’table’)。where(’description’,’like’,’%$
{term}%’)很容易受到sql注入攻击。甚至有评论提到第一种情况很容易发生注入攻击。然而,所提供的参考文献从未提及容易受到注射攻击的地方。
我是knex的维护者,我在那发表评论
knex('table').where('description', 'like', `%${term}%`)不容易受到SQL注入攻击。
这是一个错误吗?为什么knex允许.where容易受到注入攻击,却不允许.whereRaw(’description like
'%??%'‘,[term])。两种情况下的参数都不会被参数化吗?
.whereRaw当您直接将值插值到sql字符串时,这很容易受到攻击(例如??标识符替换确实如此)。
.whereRaw例如,在这种情况下的正确用法是:
.whereRaw("?? like '%' || ? || '%'", ['description', term])其中所有标识符均正确引用,并
term作为参数绑定发送到DB。
因此,答案和添加到该答案的大多数注释都是错误的。



