SIL*_*ENT 4 javascript sql knex.js
这是/sf/answers/3523659331/的后续问题。
它提到knex('table').where('description', 'like', '%${term}%')容易受到 sql 注入攻击。甚至评论也提到第一种情况容易发生注入攻击。然而,提供的参考文献从未提到.where容易受到注入攻击。
这是一个错误吗?为什么 knex 允许.where容易受到注入攻击而不是.whereRaw('description like \'%??%\'', [term]). 不是在这两种情况下参数都被参数化了吗?
这是/sf/answers/3523659331/的后续问题。
它提到 knex('table').where('description', 'like', '%${term}%') 容易受到 sql 注入攻击。甚至评论也提到第一种情况容易发生注入攻击。然而,提供的参考文献从未提到 .where 容易受到注入攻击。
我是 knex 维护者,我在那里评论说
knex('table').where('description', 'like', `%${term}%`)
Run Code Online (Sandbox Code Playgroud)
不易受到 SQL 注入攻击。
这是一个错误吗?为什么 knex 允许 .where 容易受到注入攻击,但不允许 .whereRaw('description like \'%??%\'', [term]) 。不是在这两种情况下参数都被参数化了吗?
.whereRaw当您将值直接插入到 sql 字符串时,这很容易受到攻击(例如 ?? 标识符替换)。
.whereRaw在这种情况下,正确的用法是例如:
.whereRaw("?? like '%' || ? || '%'", ['description', term])
Run Code Online (Sandbox Code Playgroud)
所有标识符都被正确引用并term作为参数绑定发送到数据库。
因此,答案和添加到该答案中的大多数评论都是完全错误的。
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |