关于 MongoDB 注入的防御问题

2017-01-14 14:25:12 +08:00
 DoraJDJ

刚才想弄一个博客系统,就在设计数据库结构时突然想到,用户在后台发布文章时,文章可能会带有各种不同的字符,这些字符若处理不当可能会造成注入现象的发生。

于是查了下有关于 MongoDB 的注入,没想到还真有:

http://www.freebuf.com/articles/web/106085.html

不过案例上用的是 PHP ,我按照相关关键词查了下好像查不到 Node.js 的案例。

自己想解决掉注入的问题,但我在 npm 查了跟 escape string 有关的关键词找了大半天就是找不到相关的轮子可用。

不知道哪位有经验的能提供下解决方案吗?谢谢。

补充:自己目前用的 MongoDB 库是 monk ,不知道有没有自带一些防注入的安全措施?

6701 次点击
所在节点    MongoDB
15 条回复
jybox
2017-01-14 14:38:17 +08:00
Kilerd
2017-01-14 14:52:35 +08:00
ORM 啊.
DoraJDJ
2017-01-14 15:40:13 +08:00
@Kilerd 刚才查了一下,好像跟防注入没太大关系的样子,能否详细解释下吗?
ryd994
2017-01-14 16:12:01 +08:00
@DoraJDJ 简单拼接字符串才要担心注入
ORM 会帮你过滤数据,所以一般不用担心
DoraJDJ
2017-01-14 16:48:39 +08:00
@ryd994 不过我查过资料 MongoDB 好像是 ODM , ODM 和 ORM 有什么差异吗?
nullzz
2017-01-14 18:22:49 +08:00
从 cnodejs 的 mongodb 注入来看, nodejs 和 php 一样支持参数数组传参,即 req.query.id 获取到的值可以是个数组比如请求 index?id[$regex]=1 后端获取到的 id 值为{"$ne": 1}
限制你请求的参数的值只能为字符串,就不可能注入
DoraJDJ
2017-01-14 18:30:06 +08:00
@nullzz 刚才我简单地用 Koa 整了一个试验环境,照你这样做好像并没发生什么

用 koa-router 写了个路由

router.get('/testing', function *(next) {
var str = this.query.value;
if (!str) {
this.body = 'Invaild';
} else {
this.body = str;
}
});

然后我尝试请求 /testing?value[$val]=233 ,返回的是 Invaild
DoraJDJ
2017-01-14 18:31:18 +08:00
@DoraJDJ 把 str 的声明改成 this.query 后返回的结果是: {"value[$val]":"233"}
nullzz
2017-01-14 18:36:17 +08:00
看样子我理解有误,有意思,看下这个 http://static.hx99.net/static/bugs/wooyun-2015-0112230.html
DoraJDJ
2017-01-14 18:47:37 +08:00
@nullzz 看上去是使用的框架不同,操作行为也不同

至少我在 Koa 里操作是不会出现这种问题的,可以先放松一会了
binux
2017-01-14 18:58:15 +08:00
@DoraJDJ /testing?$val=233
DoraJDJ
2017-01-14 18:59:27 +08:00
@binux 哈哈,了解了,有意思,我去看一下。
DoraJDJ
2017-01-14 19:03:37 +08:00
@binux
/testing?$val=233 返回 {"$val":"233"}

应该还是有可利用的空间吧?像这种字符串得怎么搞定?
binux
2017-01-14 19:44:01 +08:00
@DoraJDJ 不从客户端接受 key ,不从客户端直接接受 json ,应该就可以了吧
nullzz
2017-01-14 19:51:46 +08:00
@binux 哈哈,长见识了 KOA 还可以这样

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

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

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

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

© 2021 V2EX