我在我的应用程序中使用了新的 Neo4j 3.5 全文搜索功能。目前我通过嵌入式 API 执行 Cypher 来做到这一点。public Result search(String term, String index) { // The query String cypherQuery = "CALL db.index.fulltext.queryNodes(\"" + index + "\", \"" + term + "\") YIELD node, score\n" + "RETURN id(node), score"; // Execute query return db.execute(cypherQuery);}我认为可以利用这种方法来注入 Cypher。有没有办法只使用 API 来执行全文搜索?
1 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
为避免 Cypher 注入攻击,您应该将输入作为参数传递,如下所示:
public Result search(String term, String index) {
// The query
String cypherQuery =
"CALL db.index.fulltext.queryNodes($index, $term) YIELD node, score\n" +
"RETURN id(node), score";
// Execute query
Map<String, Object> params = new HashMap<>();
params.put("term", term);
params.put("index", index);
return db.execute(cypherQuery, params);
}
[更新]
注意:参数的使用是 neo4j 官方推荐的。例如,引用 Java 驱动程序StatementRunner的 Javadoc :
强烈建议使用参数,它有助于避免危险的密码注入攻击并提高数据库性能,因为 Neo4j 可以更频繁地重用查询计划。
添加回答
举报
0/150
提交
取消