根据 MongoDB文档,不建议使用服务器端存储函数。这个警告背后的原因是什么?
问问题
4943 次
1 回答
21
尽管 Google 搜索结果中只填满了告诉您如何操作的人,但我确信我已经多次说明了该列表:
- 这是
eval
eval
具有易于注入的自然能力,它就像 SQL 的非 PDO 等价物,如果你不围绕它构建一个完整的转义库,它会搞砸你。通过使用这些函数,您可以有效地将更安全的本地语言 MongoDB 替换为与任何旧 SQL 一样不安全的东西。- 它需要一个全局锁,可以带写锁,直到操作完成后才会释放,不像其他操作在某些情况下会释放。
eval
仅适用于Primaries,而不适用于副本集的任何其他成员- 它基本上是在一个捆绑的 V8/spidermonkey 环境中运行的、未经检查的大量 JS,它与 MongoDB 一起提供,完全能够触及数据库的任何部分和管理命令,这听起来安全吗?
- 它不是 MongoDB,也不是“MongoDBs SQL”,它在内置的 JS 环境中运行,而不是 MongoDBs C++ 代码本身(与聚合框架不同)。
- 由于前一点,与许多其他选项相比,它非常慢,这也适用于
$where
使用。
这应该足以让你在这方面开始。
于 2013-03-27T13:40:16.810 回答