为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2022-05-12 15:47:01
我在我的应用程序中使用了新的 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 可以更频繁地重用查询计划。


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信