Neo4j 3.5全文搜索,仅使用嵌入式API而无Cypher

时间:2019-01-17 20:29:37

标签: java neo4j cypher

我在应用程序中使用了新的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 个答案:

答案 0 :(得分:1)

为避免Cypher注入攻击,您应将输入作为parameters传递,如下所示:

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可以进行注入攻击并提高数据库性能   重复使用查询计划。