nosql注入-mongodb
2016-11-02 10:19
246 查看
SQL数据库具有SQL注入安全问题,所以一直好奇nosql是否有同样问题,经过调研后发现的确有这方面的讨论,但没有详细的描述和测试,因此我打算自己探个究竟。。。。(测试很简单,仅供学习交流
)
NoSQLinjection test
测试
使用mongo-java-driver
中BasicDBObject
结果:
若用户传入String则较为安全;但如果传入BasicDBObject对象,则可以通过构造特殊的BasicDBObject对象,来跳过检查,这里我用的是正则表达式。
评价:
一般,服务器只接受客户端传来的字符串或其它约定好的结构,所以上述方案没有太大影响。
使用mongo-java-driver
中Filters
结果:
与上述情况类似,只有通过构造特殊的BasicDBObject对象来逃避检查;
使用pymongo
结果:
通过构造特殊字符串,就可以达到逃避检查的效果。前提:服务器端用eval()来把json格式的字符串转换成pymongo的查询语句(可能还有其它方法,目前只测了这一种)。
评价:
若按照上述方案设计数据库接口,很危险。用户传来的字符串value,需要严格筛选。但话又说回来,若value字段是名字,如David
O` J. Bruce这样含有特殊字符的,怎么筛选?所以还是应该在设计上改进。
直接在mongo shell终端操作
结果:
这是正常的正则匹配,但若有途径将/.*/传进来就危险了,上述几个测试均是利用此特性实现的逃避检查。
评价:
mongo支持JavaScript,若有人将恶意代码写入JavaScript,那么,,,!类似的还有$where、mapReduce、group等操作,使用时应谨慎!
(参考mongdb官网描述https://docs.mongodb.com/manual/faq/fundamentals/#how-does-mongodb-address-sql-or-query-injection)
所以,对mongodb不但要设置权限,还要尽量禁止JavaScript运行,包括启动时的--eval,
用法:mongo ip:port/db_name --eval ‘db.foo.find({“name”:/.*/})’
其它方式的nosql injection
利用json注入实现,利用PHP+JavaScript实现(这个十分类似SQL注入)等
参考:(nosql注入和防范)
http://erlend.oftedal.no/blog/?blogid=110
http://erlend.oftedal.no/blog/?blogid=111
https://docs.mongodb.com/manual/faq/fundamentals/#how-does-mongodb-address-sql-or-query-injection
http://www.php.net/manual/en/mongo.security.php
SQL数据库具有SQL注入安全问题,所以一直好奇nosql是否有同样问题,经过调研后发现的确有这方面的讨论,但没有详细的描述和测试,因此我打算自己探个究竟。。。。(测试很简单,仅供学习交流
)
NoSQLinjection test
测试
使用mongo-java-driver
中BasicDBObject
结果:
若用户传入String则较为安全;但如果传入BasicDBObject对象,则可以通过构造特殊的BasicDBObject对象,来跳过检查,这里我用的是正则表达式。
评价:
一般,服务器只接受客户端传来的字符串或其它约定好的结构,所以上述方案没有太大影响。
使用mongo-java-driver
中Filters
结果:
与上述情况类似,只有通过构造特殊的BasicDBObject对象来逃避检查;
使用pymongo
结果:
通过构造特殊字符串,就可以达到逃避检查的效果。前提:服务器端用eval()来把json格式的字符串转换成pymongo的查询语句(可能还有其它方法,目前只测了这一种)。
评价:
若按照上述方案设计数据库接口,很危险。用户传来的字符串value,需要严格筛选。但话又说回来,若value字段是名字,如David
O` J. Bruce这样含有特殊字符的,怎么筛选?所以还是应该在设计上改进。
直接在mongo shell终端操作
结果:
这是正常的正则匹配,但若有途径将/.*/传进来就危险了,上述几个测试均是利用此特性实现的逃避检查。
评价:
mongo支持JavaScript,若有人将恶意代码写入JavaScript,那么,,,!类似的还有$where、mapReduce、group等操作,使用时应谨慎!
(参考mongdb官网描述https://docs.mongodb.com/manual/faq/fundamentals/#how-does-mongodb-address-sql-or-query-injection)
所以,对mongodb不但要设置权限,还要尽量禁止JavaScript运行,包括启动时的--eval,
用法:mongo ip:port/db_name --eval ‘db.foo.find({“name”:/.*/})’
其它方式的nosql injection
利用json注入实现,利用PHP+JavaScript实现(这个十分类似SQL注入)等
参考:(nosql注入和防范)
http://erlend.oftedal.no/blog/?blogid=110
http://erlend.oftedal.no/blog/?blogid=111
https://docs.mongodb.com/manual/faq/fundamentals/#how-does-mongodb-address-sql-or-query-injection
http://www.php.net/manual/en/mongo.security.php
相关文章推荐
- java-spring与mongodb的整合方式一 自动注入xml
- NoSql之MongoDB(系列二)
- mongodb,redis,hbase 三者都是nosql数据库,他们的最大区别和不同定位
- NoSQL——MongoDB
- NoSQL数据库_MongoDB_MongoDB_Shell
- NoSQL性能测试:MongoDB VS SequoiaDB
- NOSQL之mongodb简介及安装 for windows<一>
- NoSQL就业形势分析:Cassandra和MongoDB最受欢迎
- mongodb, redis, hbase三种nosql数据的对比
- 3.非关系型数据库(Nosql)之mongodb:升降序排序,排序分页,$all,$in,$nin,$or,$nor, $exists,游标,更新(update,$set,$unset,$inc)
- NoSQL高级培训课程-HBase&&MongoDB(两天版)
- nosql数据库:mongodb,redis,memcached,其优缺点和使用应用场景?
- PHP对MongoDB[NoSQL]数据库的操作
- 『搭建中小型互联网公司后台服务架构』四、后台服务nosql数据库mongodb:高可用讲解以及安装
- NoSQL数据库—MongoDB入门使用和c#客户端的访问
- nosql类型的数据库:mongodb、Redis、Memcached的优化点
- NoSQL 之 MongoDB
- SequoiaDB:比MongoDB领先一到两年 打造企业级NoSQL数据库
- HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库