用了参数化查询,还是被 SQL 注入了,上线 3 天几十个用户反馈账号被盗余额被刷完,求助怎么解决?

2024-06-09 22:04:28 +08:00
 drymonfidelia

Python+MongoDB 写的一个简单(虽然业务都很简单但是有九百多个接口,选型用 Python+MongoDB 就是为了往上面堆各种奇怪格式的简单接口方便)网站,拉日志排查发现有人提交了类似这种 Payload {"password":{"$ne":"111"}},登录接口好解决,直接 str 转换一下字段,剩下九百多个接口过一遍工作量太大了还容易有漏,有人了解如果我加一个中间件遍历提交的 JSON 把 $ 开头的 key 全部过滤掉就安全了吗?

每次用新技术必被坑,上次是被 Tauri 浪费了一整天

11667 次点击
所在节点    信息安全
82 条回复
laminux29
2024-06-10 07:51:22 +08:00
楼主举的注入例子:Payload {"password":{"$ne":"111"}}

这正是参数化查询模块要去处理的事情,如果这还没注入了,你确定你正确使用了参数化查询模块?

建议用 AI 把你的代码检查一遍。
msg7086
2024-06-10 08:10:02 +08:00
用户输入的密码为什么能传进 mongo ?换我的话会先取出 password hash 然后再在本地对比。
这系统谁开发的啊这么简单的坑也能中的吗。
输入参数校验是基本要求吧,这不叫工作量翻倍,这是之前为了走捷径把大动脉砍了,现在在亡羊补牢。
再还有,你们的测试代码呢,这种场景不写 behavior test 的吗。
hlwjia
2024-06-10 08:22:36 +08:00
既然你觉得用 ORM 怕麻烦,那现在处理这些问题你觉得麻烦不?

如果 ORM 光是麻烦,没别的好处,也不会有人一直用吧


还有 #9 楼你写的,“接口太多,校验起来工作量翻倍”,不知道你现在的工作量翻倍了没有
Kinnice
2024-06-10 08:23:23 +08:00
1. 先上 waf
2. 没正确使用参数校验模块
among
2024-06-10 08:49:24 +08:00
mongoengine 用了吗
vincent7245
2024-06-10 09:08:23 +08:00
"接口太多了,校验起来工作量翻倍"

那还能说什么呢,最基础的防护都不做,没被删库也算攻击者仁慈了
MMM25O7lf09iR4ic
2024-06-10 09:19:48 +08:00
普通程序员除了依赖框架没有什么好手段,因为他们连相关的概念都没有,谈什么防御。简单的过滤字符串可不代表能解决问题,某个知名库一个特殊字符改了三次才解决问题。
EndlessMemory
2024-06-10 10:55:24 +08:00
你这个管理起来问题不小
walkeronway
2024-06-10 12:34:41 +08:00
嫌麻烦?这会儿被教做人了吧?你以为为啥大家都在做安全防护,是闲着没事干还是喜欢? C 端产品要直面所有可能的恶意,敢偷懒?

话说静态扫描能扫出来你这些安全漏洞吗?
awolf
2024-06-10 12:38:57 +08:00
LZ 开善堂的,大家可以散了
kneo
2024-06-10 12:54:58 +08:00
啥叫用新技术必被坑?我看你就是最大的坑……
uiiytwyfsdtr
2024-06-10 13:53:40 +08:00
网络攻防 其实防不胜防

只能靠你自己的 经验 和 安全意识
yidinghe
2024-06-10 14:08:07 +08:00
你把调用方的参数直接透传给数据库,不死才怪。首先防住登录接口,然后其他接口要有状态,根据调用方权限添加对应的查询条件,而且禁止调用方通过参数覆写这些条件。最后每个接口设置参数白名单,不在白名单中的参数过滤掉。
drymonfidelia
2024-06-10 14:27:44 +08:00
@msg7086 这系统只支持短信验证,password 字段存的其实是短信验证码,所以没加密
这套系统需求太杂了都是手动测试
hefish
2024-06-10 15:31:54 +08:00
大佬 A:哎呀。。。没搞了,来帮帮我啊。。
大佬 B:你这个要这么这么这么。。。
大佬 A:那太麻烦了,谁有更好的办法吗?
大佬 C:那你先这么这么这么。。。不然会有问题
大佬 A:我觉着没问题。。
大佬 D:你不写个 ORM 吗?
大佬 A:写 ORM 太麻烦了。。。谁能帮帮我啊。。。

。。。。
gwy15
2024-06-10 15:39:53 +08:00
你不会是从 req json.loads 读一个 object 然后直接传给 mongodb 吧
janus77
2024-06-10 15:41:31 +08:00
哈哈哈,出现安全问题了,然后说别人的方法麻烦。。。
安全就是麻烦的啊,你以为飞机起飞前一遍遍教人使用救生衣是干什么的?
GG5332
2024-06-10 16:12:40 +08:00
没有必要冷嘲热讽,安全从来都是一种取舍,只要被黑带来得损失都没有比写 ORM 的麻烦大,那就大可不必写,而且还更好,黑客也很开心,你也很开心。何尝不是一种 win ,win 。现实就是很多业务就是跟羊毛党黑产党相互依存,不离不弃。
lneoi
2024-06-10 16:16:28 +08:00
懒的话就上 web 防火墙,或者其他服务器防护软件,多多少少能处理大部分情况
gongquanlin
2024-06-10 16:16:55 +08:00
想起来接的一个擦屁股的活,大哥前后端全栈开发,查询语句直接前端拼 where 后端查询
到现在 bug 一堆还没上线,到了上线之后还不知道咋甩锅呢,哈哈哈

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

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

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

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

© 2021 V2EX