0

私はC#用のneo4jクライアントでWithParamsを使用してきましたが、withParamsはラベルや関係タイプでは機能しません。

私が現時点で考えた代替案は、パラメーターとして何らかのラベルに基づいて形成したい文字列を連結し、暗号クエリを構築することでした。あれは:

string optionalMatchString = $"p =(n1)-[{relationshipsString}]-(n2)";
graphClient.Cypher.Match("(n1)")
           .Where((Node n1) => n1.Identifier == identifier)
           .OptionalMatch(optionalMatchString)

ご想像のとおり、 relationshipString は私に渡されたパラメーターです。WithParams を使用すると、クエリはパラメーターを置き換えないため、今のところ文字列を連結しますが、これは攻撃に対して脆弱です... (はい?)

APOCについて知り、この問題を見ました

これは私がこれを見た例です:

CALL db.labels() yield label
call apoc.cypher.run("MATCH (n:`"+label+"`) RETURN keys(n) as keys LIMIT 1",{}) yield value as row
RETURN label, row.keys as keys

どうやら、cypher.runラベル(またはその関係)を変数として(パラメーターから)配置できるAPOCプロシージャが呼び出されているようですが、私が見るところ、それらは文字列を連結しているだけです...それは私は何をしてきたのですか?または、APOC はクエリに加えて何らかの方法で他の処理を実行しますか? その APOC 手順は、注射に対して「安全」でしょうか?

4

2 に答える 2