私はC#用のneo4jクライアントでWithParamsを使用してきましたが、withParamsはラベルや関係タイプでは機能しません。
私が現時点で考えた代替案は、パラメーターとして何らかのラベルに基づいて形成したい文字列を連結し、暗号クエリを構築することでした。あれは:
string optionalMatchString = $"p =(n1)-[{relationshipsString}]-(n2)";
graphClient.Cypher.Match("(n1)")
.Where((Node n1) => n1.Identifier == identifier)
.OptionalMatch(optionalMatchString)
ご想像のとおり、 relationshipString は私に渡されたパラメーターです。WithParams を使用すると、クエリはパラメーターを置き換えないため、今のところ文字列を連結しますが、これは攻撃に対して脆弱です... (はい?)
これは私がこれを見た例です:
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 手順は、注射に対して「安全」でしょうか?