首页 新闻 会员 周边

web后台防sql注入的困惑

0
悬赏园豆:20 [已解决问题] 解决于 2020-10-15 17:43

最近安全组的同事给我们提了一个sql注入的高危漏洞,
跟同事一起看了代码,发现对于前段传入进来的字符串参数未做严格的合法性检测,
于是我们开始动手修复这个漏洞,然后就产生了分歧,

同事认为,对前段所有的字符串类型的参数都做检测,且他写的检测逻辑非常严格,如下:
1.根据项目需要仅支持部分特殊字符,2.通过正则表达式匹配是否包含所有的mysql关键字,如果包含则认为该参数不合法。

我觉得仅针对要拼接到sql语句中的字符串类型参数做检查就好了,为什么要检查所有的字符串类型参数?

请问各位大神,我的同事的做法是否不太合理呢?你们是怎样在代码中防御sql注入的呢?

谢谢!

周周和奇奇的主页 周周和奇奇 | 初学一级 | 园豆:182
提问于:2020-10-14 17:44
< >
分享
最佳答案
0

直接参数化防止sql注入,问题的描述可以拆分成两点看待,一个是从业务上验证参数的合法性,一个是防止sql注入。.Net框架提供模型校验,属性如[Required]、[ RegularExpression]的设计都是满足业务需求上的验证的,防sql注入是系统框架安全需求。实际业务中很大可能存在符合业务参数的需求但是作为字符串拼接sql时异常的场景,比如客户提交的参数中包含富文本内容。

收获园豆:20
最美的不是下雨天 | 初学一级 |园豆:4 | 2020-10-15 09:11
其他回答(4)
0

為了防止SI,針對會進入SQL的參數做檢測,這個方向沒有錯
但沒有進入SQL的參數就不檢測嗎?這蠻值得討論的
我認為,檢測可以做在進入SQL之前,而不是做在API入口
這樣既確保所有進入SQL的參數都通過檢測,也不會因為檢測多餘的參數浪費效能或時間
而未被檢測的參數如果有一天也需要進入SQL,避不了一定要經過檢測層,這樣就不怕將來增加參數時出現遺漏

RosonJ | 园豆:4910 (老鸟四级) | 2020-10-14 17:51

谢谢!在进入sql之前做参数检测很有道理

支持(0) 反对(0) 周周和奇奇 | 园豆:182 (初学一级) | 2020-10-15 09:02
1

直接参数化,拼接sql直接传值实际上就是一种懒惰的编程习惯

E行者 | 园豆:1761 (小虾三级) | 2020-10-14 17:56

谢谢! 看来我的编程习惯还是不够好...只是在项目后期再去修改sql语句为参数化工作量就有点大了..

支持(0) 反对(0) 周周和奇奇 | 园豆:182 (初学一级) | 2020-10-15 09:03

@周周和奇奇: 理解

支持(0) 反对(0) E行者 | 园豆:1761 (小虾三级) | 2020-10-15 11:12
0

我认为你和他做的都不合理,如果前端传来了MySQL关键字字符串,难道要拒绝存储吗。我觉得应该釜底抽薪:直接使用参数话的SQL就好了。

会长 | 园豆:12401 (专家六级) | 2020-10-14 18:20

嗯嗯,谢谢!

支持(0) 反对(0) 周周和奇奇 | 园豆:182 (初学一级) | 2020-10-15 09:03
0

防注入的任务:屏蔽sql参数导致的非法执行。我认为还是应该将验证前置,所有后台接收的参数、信息字段都是有预期模型的,从安全、严谨、业务信息准确等角度,对不符合期望的数据类型,都应该检查,并隔离。并反馈相应的提示消息。

邢少 | 园豆:10926 (专家六级) | 2020-10-15 09:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册