关于 sql 防注入问题

2020-09-10 17:59:19 +08:00
 zarte

为啥不用参数?老项目改起来麻烦。
查询语句原本拼接前后都有单引号的前提下。全局过滤单引号,可行不?

906 次点击
所在节点    问与答
6 条回复
opengps
2020-09-10 18:05:05 +08:00
直接替换不大行,因为损害了用户输入字符(如果用户输入单引号,你给他清空吗?)
你可以在入参部分,进行全局替换单引号为两个单引号(第一个标识注释,第二个表示用户字符)。其实这么做挺麻烦,因为程序涉及到输入的地方,每一步都得替换
eviladan0s
2020-09-10 21:40:44 +08:00
替换或者过滤清除其实都有风险,安全上太多类似案例了,如果你要搞可以把过滤函数发出来大家帮你审审
greatbody
2020-09-10 22:01:29 +08:00
老项目考虑下渐进式的重构。
UT 覆盖上,然后重构。
zarte
2020-09-11 09:38:01 +08:00
@greatbody 重构是不可能重构的
zarte
2020-09-11 09:38:31 +08:00
@opengps 只考虑防注入效果,其他的小问题。
zarte
2020-09-11 09:39:46 +08:00
@eviladan0s
```
foreach (string sqlKey in patten2)
{
if (_sWord.IndexOf(sqlKey) >= 0)
{
//只要存在一个可能出现 Sql 注入的参数,则直接退出
result = true;
break;
}
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX