3

我正在使用 neo4j 1.9.4,我想在使用 neo4jphp 的(公共)网站上显示有关图表的一些信息。为了获取一些数据,我在 neo4jphp 中使用密码查询。这些查询显然只从图中读取数据。

我必须确保网站的访问者无法修改图表中的任何数据。因此,我设置了身份验证扩展插件并创建了两个用户(一个具有只读“RO”和一个具有读写“RW”访问权限),如文档所述。但是,neo4jphp 中的密码查询仅适用于具有 RW 权限的用户,但不适用于具有 RO 权限的用户。

我知道http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth几乎解释了如何保护 neo4j,但我绝对不知道如何做到这一点。特别是“arbitrary_code_execution”部分似乎很有趣,但我不知道如何利用它。

如何实现可以从 Web 服务器执行读取密码查询?顺便说一句:Web 服务器(显示一些结果)和 neo4j 在不同的机器上运行。

我将不胜感激任何帮助,谢谢!

编辑:我的场景实际上并没有那么复杂,所以我确信必须有一个解决方案:从 localhost 授予任何访问权限(读写),而来自远程 Web 服务器的访问权限仅限于从图形中读取。我怎样才能做到这一点?如果这是不可能的:我如何限制从远程 Web 服务器对某些预定义(密码)查询的访问,其中用户只能提供一些参数?

4

2 回答 2

1

您应该按照http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth中的说明使用 apache 代理

您需要的信息是发布密码查询的 URL:

http://localhost:7474/db/data/cypher  

neo4php 只是一个包装器,最终会发布到该 url。您可以在此处找到更多详细信息:http: //docs.neo4j.org/chunked/milestone/rest-api-cypher.html

所以基本上这意味着您只允许使用密码 url 的查询访问 neo4j 服务器。


关于只读密码查询:

我没有检查 neo4jphp,但是如果您直接使用 REST API,您可以通过添加到 conf/neo4j.properties 将数据库设置为 read_only :

read_only=true

您可以在 webadmin 中检查服务器确实处于只读模式

在此处输入图像描述

刚刚测试它,服务器将只接受读取查询:

在此处输入图像描述

并将返回以下响应

{
"message": "Expected to be in a transaction at this point",
"exception": "InternalException",
"fullname": "org.neo4j.cypher.InternalException",
"stacktrace":
[...],
"fullname" : "org.neo4j.graphdb.NotInTransactionException"
}
于 2013-10-28T09:03:59.343 回答
1

另一个答案是使用 Cypher-RS 插件。有一个 1.9 分支。

这允许您创建本质上是单个密码查询的端点。(所以查询必须是预定义的)。

您可以使用 mod 代理来限制这些预定义的查询。我不确定 mod 代理是否允许您仅限制 GET 请求,但如果允许,您可以允许访问插件的 GET 请求,因为它不允许修改查询成为 GET 请求。

https://github.com/jexp/cypher-rs

于 2013-11-05T22:01:27.437 回答