为什么不建议在MongoDB中使用服务器端存储的函数?

EdM*_*elo 18 security stored-functions mongodb

根据MongoDB 文档,不建议使用服务器端存储的函数.这个警告背后的原因是什么?

Sam*_*aye 21

我确信我已经多次说明了这个列表,尽管谷歌的搜索结果只是填充了人们告诉你如何做到这一点:

  • 它是 eval
  • eval具有很容易注入的自然能力,它就像一个非PD的SQL,如果你没有在它周围扩展一个完整的转义库,它会搞砸你.通过使用这些函数,您可以有效地将MongoDB中更安全的本机语言替换为与任何旧SQL一样不安全的东西.
  • 它采用全局锁定并且可以进行写入锁定,并且在操作完成之前不会释放,这与在某些情况下将释放的其他操作不同.
  • eval 仅适用于Primaries,而不适用于副本集的任何其他成员
  • 它基本上是运行的,未经检查的,捆绑的V8/spidermonkey envo中的一吨JS,MongoDB具有完全触及数据库和管理命令的任何部分的能力,这听起来安全吗?
  • 它不是MongoDB,也不是"MongoDBs SQL",它在内置的JS环境中运行,而不是MongoDBs C++代码本身(与聚合框架不同).
  • 由于前一点,与许多其他选项相比,它的速度非常慢,因此也可以$where使用.

这应该足以让你开始这方面.