【发布时间】:2016-11-18 06:56:05
【问题描述】:
我正在开发一个用 Python 编写的 API,它接受来自客户端的 JSON 负载,应用一些验证并将负载存储在 MongoDB 中,以便可以异步处理它们。
但是,对于(合法地)包含以$ 开头和/或包含. 的密钥的有效负载,我遇到了一些问题。 According to the MongoDB documentation,我最好的办法是避开这些字符:
在某些情况下,您可能希望使用用户提供的密钥构建 BSON 对象。在这些情况下,密钥需要替换保留的
$和.字符。任何字符都足够,但请考虑使用 Unicode 全宽等效字符:U+FF04(即“$”)和U+FF0E(即“.”)。
很公平,但这就是有趣的地方。我希望这个过程对应用程序是透明的,所以:
- 检索文档时,密钥应该是非转义的...
- ...但只有首先需要转义的键。
例如,假设一个(邪恶的)用户发送了一个 JSON 有效负载,其中包含一个像 \ff04mixed.chars 这样的密钥。当应用程序从存储后端获取此文档时,应将此密钥转换回\ff04mixed.chars,不是 $mixed.chars。
我主要关心的是信息泄露;我不希望有人发现应用程序需要对 $ 和 . 字符进行特殊处理。坏人可能比我知道如何保护它更好地利用 MongoDB,我不想冒险。
【问题讨论】:
标签: python mongodb escaping pymongo