这是一个后续问题https://stackoverflow.com/a/50337990/1370984 https://stackoverflow.com/a/50337990/1370984 .
它提到knex('table').where('description', 'like', '%${term}%')
容易受到sql注入攻击。甚至有评论提到第一种情况容易受到注入攻击。然而所提供的参考资料从未提及.where
容易受到注入攻击。
这是一个错误吗?为什么 knex 会允许.where
容易受到注入攻击,但不会.whereRaw('description like \'%??%\'', [term])
。这两种情况下参数不是都被参数化了吗?
这是一个后续问题https://stackoverflow.com/a/50337990/1370984 https://stackoverflow.com/a/50337990/1370984 .
它提到 knex('table').where('description', 'like', '%${term}%') 容易受到 SQL 注入攻击。甚至有评论提到第一种情况容易受到注入攻击。然而,所提供的参考资料从未提及容易遭受注入攻击的地方。
我是 knex 维护者,我在那里评论过
knex('table').where('description', 'like', `%${term}%`)
不易受到 SQL 注入攻击。
这是一个错误吗?为什么 knex 允许 .where 容易受到注入攻击,但不允许 .whereRaw('description like \'%??%\'', [term]) 。这两种情况下参数不是都被参数化了吗?
That .whereRaw
当您将值直接插入到 sql 字符串时(例如 ?? 标识符替换),很容易受到攻击。
正确使用为.whereRaw
在这种情况下例如:
.whereRaw("?? like '%' || ? || '%'", ['description', term])
所有标识符都被正确引用并且term
作为参数绑定发送到数据库。
因此,答案和添加到该答案的大多数评论都是完全错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)