neo4j文档说非托管扩展是危险的。我想知道怎么样?

时间:2014-06-20 03:51:40

标签: neo4j

neo4j文档here

说非托管扩展可能很危险,但没有解释如何。任何解释它如何危险的例子或案例都将非常感激。

1 个答案:

答案 0 :(得分:2)

正如您所猜测的那样,提示位于以下名称: unmanaged

非托管扩展功能非常强大,允许您部署任意代码,例如非常糟糕的代码(列表 详尽无遗) :

  • System.exit
  • 安全漏洞(例如,未经检查的HTTP请求参数允许Cypher injection
  • 线程不安全代码
  • 效率低下的Cypher查询/遍历(PROFILE可能有助于Cypher的故障排除)
  • 高度垃圾生成代码(例如,在巨大的Java for-each循环中创建许多孤立对象)

关于最后一点的简单例子:

// do not do this at home
String foo = "";
for (int i = 0; i < 1000000; i++) {
    foo += String.valueOf(i);
}

这当然既非常天真又可能。同样,您可以部署任意代码,并最终导致Neo4j实例的堆被污染,因为其中一个活动的非托管扩展中定义了低效的代码。

实际上,非托管扩展会直接影响您的Neo4j实例,因为它们共享相同的服务器和环境。这就是为什么你在使用这样一个功能时必须小心(谨慎,我的意思是:监视器)。