Neo4jClient - "之间的区别.Where((TUser u)=> u.Id == user.Id)" vs" .Where(" u.Id = {param}")。WithParam(" param",user.Id)"

时间:2015-08-09 07:35:09

标签: c# neo4j code-injection neo4jclient

我对使用

之间的区别有疑问
db.Cypher.Match("(u:User)").Where((TUser u) => u.Id == user.Id)  

vs

db.Cypher.Match("(u:User)").Where("u.Id = {param}").WithParam("param", user.Id)

第一个是否存在任何安全风险(注入),但我询问了性能差异,因为看起来检查第一个在Web应用程序进程上执行的查询,但在第二个查询由Neo4j数据库实例执行。

1 个答案:

答案 0 :(得分:2)

绝对没有区别。

在第一个示例中,我们会自动将其移动到您的参数:https://github.com/Readify/Neo4jClient/wiki/cypher#parameters

该参数将自动命名为p0

您可以通过查看QueryText查看实际线路内容来查看此内容:https://github.com/Readify/Neo4jClient/wiki/cypher#debugging

您的任何一个示例都没有注入风险。在这两种情况下,都会安全地处理id。如果你进行了字符串连接,就会有注入风险,比如Where("u.Id = " + user.Id.ToString())

至于性能,在您致电.Results之前,您正在编写的所有内容仍然会打包到查询中并在Neo4j上执行。 ==比较从未在.NET中实际执行过:您只是使用C#来表达您的查询,然后我们将表达式树拆开并将其重新写入Cypher。