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

334 天前
 drymonfidelia

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

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

10949 次点击
所在节点    信息安全
82 条回复
drymonfidelia
333 天前
@drymonfidelia 还有 boolern 和 null(None),也允许 忘写了
scriptB0y
333 天前
@drymonfidelia 但是如果攻击者使用这个 {"$ne":"111"} 传进来,你查数据的内容不应该是:

{"password": {"$eq": {\"$ne\":\"111\"}"}}

这样吗?查询也不成立呀。

莫非。。。你直接让前端给你传过来查询的语句?
drymonfidelia
333 天前
@scriptB0y 前端传来的是 JSON ,框架 parse 出来的 password 是一个 dict
Masterlxj
333 天前
@dearmymy 是的,使用 ORM 基本可以避免 sql 注入
lrh3321
332 天前
你这 password 的类型都不对了,再怎么赶工,你也要先把它强转成字符串吧。
LuckyLauncher
332 天前
“校验起来工作量翻倍”
那等人把你们用户的余额都刷完,你就没有任何工作量了
lambdaq
332 天前
@drymonfidelia 大概明白了。直接把 json 里的东西传到 mongo 里去操作。。好家伙。。
Nazz
332 天前
是不是让前端传 JSON 过来自己查询了
drymonfidelia
332 天前
@Nazz json 的字段值直接带入查询了
bthulu
332 天前
改什么改, 报警啊
mmdsun
332 天前
这种可能是 json 序列号漏洞,比如 fastjson 这种漏洞提权就很多
sampeng
332 天前
@drymonfidelia 嫌麻烦,就别怨踩雷
Richared
332 天前
这直接给参数拼 sql 去处理?都当字符串处理不就行了么。
corcre
332 天前
你这参数化处理是我见过最新奇的...
rainingwrong
332 天前
@drymonfidelia 想啥呢,上 ORM
MapleEve
332 天前
这个为什么不上 ORM 啊
GoRoad
332 天前
大开眼界
yumenlong
332 天前
https://v2ex.com/t/1048368# 看了 op 这篇主题,感觉是来编故事赚铜币的吧.
Kalan
332 天前
还有这种神人
drymonfidelia
332 天前
@yumenlong 我铜币根本用不完 骗来干什么

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

https://yangjunhui.monster/t/1048156

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

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

© 2021 V2EX