C# 使用neo4jclient搜索任意节点属性
我有一个数据访问功能,比如C# 使用neo4jclient搜索任意节点属性,c#,.net,neo4j,neo4jclient,C#,.net,Neo4j,Neo4jclient,我有一个数据访问功能,比如 public IList<NodeType> GetNodesByProperties(IDictionary<string, string> properties) 它返回所有属性匹配的所有neo4j节点 我找不到通过neo4jclient进行此类搜索的任何官方方法。我编写了如下函数: public IList<NodeType> GetNodesByProperties(IDictionary<string, strin
public IList<NodeType> GetNodesByProperties(IDictionary<string, string> properties)
它返回所有属性匹配的所有neo4j节点
我找不到通过neo4jclient进行此类搜索的任何官方方法。我编写了如下函数:
public IList<NodeType> GetNodesByProperties(IDictionary<string, string> properties)
{
var baseQuery = neo4jclient.Cypher
.Match("(node:NodeType)")
.Where("true");
foreach (var tupple in properties)
baseQuery = baseQuery.AndWhere($"node.{tupple.Key} = \"{tupple.Value}\"");
var resultQuery = baseQuery
.Return(node => node.As<NodeType>());
return resultQuery.Results;
}
这确实有效,但这会带来明显的密码注入攻击风险,因为该函数将原始文本直接插入密码查询
如何安全地搜索任何节点属性?如果不想构建/连接字符串,可以在查询过程中将节点和关系用作属性映射。例如:
:param prop: "login"
:param login: "ikwattro"
-
这将起作用,但您将使用索引用法:/
我相信,虽然应用程序不应允许用户输入任何他想要的内容,但您可以通过内置过程获得有关模式的大量信息,然后可以将用户输入与可能的值列表进行比较
如果这不是输入属性键的用户,则不存在使用字符串连接的问题。您可能已经对此进行了研究,但是否搜索了Neo4jClient和参数?关于这方面的几个问题+答案,这似乎是一个反对注入的解决方案。我已经看到了许多关于如何使用.WithParam安全地搜索属性值的答案,但我还没有看到任何在搜索中安全指定属性键的解决方案。
MATCH (n:User) WHERE n[$prop] = $login RETURN n