标签:json python mongodb pymongo code-injection
我正在为MongoDB数据库程序编写REST接口,我正在尝试实现搜索功能.我想公开整个MongoDB接口.我有两个问题,但是它们是相关的所以我将它们放在一个帖子中:
>使用Python json模块解码不受信任的JSON是安全的,还是像pickle模块那样可以允许任意代码执行?
>将解码后的JSON传递给PyMongo find()函数是否安全?
解决方法:
Python的JSON模块应该可以安全地使用不受信任的输入,至少在它的默认配置中(即你没有提供任何自定义解码器,它们可能在其中有漏洞).
但是,我们不能肯定地说json.loads()的结果可以安全地传递给pymongo的find()方法.虽然find()方法不会修改(更新或删除)mongodb中的数据,但是有可能有意识地执行非常糟糕的查询,例如以下使用特制的$where子句来创建非常差的性能特征:
{"$where": "function() { for (var i=0; i<1000000; i++) {}; return true; }"}
请注意,这是有效的JSON和有效的mongodb查询.
出于这个原因,我不允许将用户自制的JSON直接用作对mongodb的查询,除非您的用户都是可信任的(即您直接控制的客户端,例如应用程序中的其他服务器/组件).
标签:json,python,mongodb,pymongo,code-injection 来源: https://codeday.me/bug/20190530/1186060.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。