Neo4j 3.5 полнотекстового поиска с использованием только встроенного API без Cypher - PullRequest
0 голосов
/ 17 января 2019

Я использую новую функцию полнотекстового поиска Neo4j 3.5 в своем приложении. В настоящее время я делаю это, выполняя Cypher через встроенный API.

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);
}

Я думаю, что этот подход можно использовать для инъекции Сайфера. Есть ли способ выполнить полнотекстовый поиск, используя только API?

1 Ответ

0 голосов
/ 17 января 2019

Чтобы избежать атак с использованием 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);
} 

[UPDATE]

ПРИМЕЧАНИЕ: использование параметров официально рекомендовано neo4j. Например, чтобы процитировать Javadoc для драйвера Java StatementRunner :

Использование параметров настоятельно рекомендуется, оно помогает избежать опасных шифров инъекция атак и повышает производительность базы данных, как Neo4j может повторное использование планов запросов чаще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...