-
-
Notifications
You must be signed in to change notification settings - Fork 615
关于模型中 where 使用不当导致 SQL 注入的问题修复方案
Welefen Lee edited this page Sep 14, 2017
·
9 revisions
模型中 where 提供了方便过滤的条件,但如果没有对参数进行过滤校验,可能会导致 SQL 注入漏洞。 如:
this.model('user').where({id: this.get('id')}).find();
在上面的例子中,我们希望从 URL 获取参数来查询,本意是希望 id 值为 int 类型,但如果不作任何校验,那么值有可能为 ['!=', 3]
,这样生成的 SQL 并不我们希望的,导致注入漏洞。所以一定要在 Logic 中作参数安全过滤。
为此,框架加了个转义的策略,当发现参数值为数组,且第一个参数为 where 中的关键字时,那么在后面补个空格,如:['!=', 3]
变成 ['!= ', 3]
,这样后续 where 里解析时会报参数不合法的错误,从而避免安全问题。
升级方案如下:
- ThinkJS@3 项目中升级
thinkjs@3.1.2
,think-model@1.1.1
,think-model-abstract@1.1.0
- ThinkJS@2 项目中升级
thinkjs@2.2.24
- ThinkJS@1 项目中升级
thinkjs@1.2.15
一定要在 Logic 中对参数作安全校验!
一定要在 Logic 中对参数作安全校验!
一定要在 Logic 中对参数作安全校验!