Neo4j 3.5 全文搜索仅使用嵌入式 API 而不使用 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 来执行全文搜索?


不负相思意
浏览 152回答 1
1回答

慕哥6287543

为避免 Cypher 注入攻击,您应该将输入作为参数传递,如下所示:public Result search(String term, String index) {&nbsp; &nbsp; // The query&nbsp;&nbsp; &nbsp; String cypherQuery =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "CALL db.index.fulltext.queryNodes($index, $term) YIELD node, score\n" +&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "RETURN id(node), score";&nbsp;&nbsp; &nbsp; // Execute query&nbsp; &nbsp; Map<String, Object> params = new HashMap<>();&nbsp; &nbsp; params.put("term", term);&nbsp; &nbsp; params.put("index", index);&nbsp; &nbsp; return db.execute(cypherQuery, params);}&nbsp;[更新]注意:参数的使用是 neo4j 官方推荐的。例如,引用 Java 驱动程序StatementRunner的 Javadoc :强烈建议使用参数,它有助于避免危险的密码注入攻击并提高数据库性能,因为 Neo4j 可以更频繁地重用查询计划。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java