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

17 天前
 drymonfidelia

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

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

7908 次点击
所在节点    信息安全
82 条回复
jeesk
17 天前
技术方案评估你找 chatgpt ,也许比你自己决定好
illl
17 天前
$ne 应该是 MongoDB 这种非关系型数据库注入的手段,建议还是多搜索了解一下相关的手段和正确防护方式。光检测了$,貌似可以使用 Unicode 编码绕过。先知上有相关的文章,可以看看。
HFX3389
17 天前
先上 WAF ,什么南墙、雷池之类的,先让 WAF 过滤一遍再说
HFX3389
17 天前
@jeesk #1 我觉得编程方面 claude-3 比 GPT4 好用多了也聪明多了...
sagaxu
17 天前
用户输入不是 str?
fzls
17 天前
客户端传入的参数你在服务器不校验,直接写入数据库的嘛?
cnevil
17 天前
只有个$ne 不是注入漏洞吧。。我觉得你应该是存在别的漏洞
比如越权啥的
lambdaq
17 天前
不是哥们。。。。mongo 也能被注入???
drymonfidelia
17 天前
@fzls 接口太多了,校验起来工作量翻倍
drymonfidelia
17 天前
@lambdaq 按照 2 楼的查一下,mongodb 注入花样还很多
NewYear
17 天前
可能是我的知识太贫瘠了。

我一般认为丢到数据库里的数据就两种, 非字符串和字符串。

字符串就用引号包起来,做个转义,,,,非字符串就判断一下类型对不对。

这是不用“参数化查询”、“绑定数据”的方法,如果用上绑定数据,就不用转义数据了(数据库会做这一步)。

所以我迷茫了,你的问题在哪呀。(不太熟悉这个数据库)
zeusho871
17 天前
django 好像有个 mongo 库 啥都给你封装好的
drymonfidelia
17 天前
@NewYear @sagaxu MongoDB 不需要定义类型,list dict 随便找个字段都能直接塞
Masterlxj
17 天前
不用 ORM ?
hdben
17 天前
听起来像是,没有对数据做任何处理, 直接把前段给的内容作为查询语句的一部分?
drymonfidelia
17 天前
@hdben 是,因为本来 MongoDB 就支持参数化查询,觉得没问题
@Masterlxj ORM 要写模型麻烦
dayeye2006199
17 天前
自己搞不定就 ODM
sagaxu
17 天前
@drymonfidelia 用户请求参数构造成 map 了,框架层面可以禁用这个特性么?比如写个拦截器,所有参数统一转成 str ,特殊情况再特殊处理
dearmymy
17 天前
@Masterlxj 用 django 得 orm 是不是就不需要考虑 sql 注入了?
vituralfuture
16 天前
web 框架基本都有数据类型校验的功能吧,或者用 pydantic 也行,fastapi 自带这个功能。另外后端基本常识,不信任前端传来的任何数据

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

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

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

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

© 2021 V2EX