我想知道在查询REST时是否存在查询注入问题?
参数化查询肯定会使事情更清晰,但我也能够使用字符串连接进行查询来操作属性和标签。
我发现后一种方法更灵活,因为有时我无法按照参数范例查询我想要的方式。 (Can I parameterize labels and properties on CREATE or SET? (REST and transaction))
如果不担心某种注入,那么连接查询字符串会带来安全风险吗?我个人对查询Neo4j没有太深入的理解,所以我想让我的选择开放,并愿意尝试任何建议。
编辑:阅读Wes的评论后。我想让观众快速浏览一下发布的链接。那些我想使用Where和Set的情况怎么样?什么是参数化的最佳方法?谢谢!
答案 0 :(得分:1)
这是一个假设的情况,因为有人知道您的查询。如果您接受用户输入并将其连接到查询中,则可能会发生这种情况:
"MATCH (u:User) WHERE u.id = " + userId + " RETURN u"
让我们尝试一下userId:
"1 WITH count(1) AS dummy MATCH (u:User) OPTIONAL MATCH (u)-[r]-() DELETE u, r "
我确信有些人会提出更糟糕的例子......
这可以通过参数立即解决。你也可以消毒输入,但如果可能的话,我会采取安全的方式。