使用solrj时,防止solr查询注入

时间:2014-11-11 10:16:45

标签: solr solrj code-injection

查询HttpSolrServer。

SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(q);
QueryResponse queryResponse = solrServer.query(solrQuery);

我需要构建一个solr查询,比如 "作者:* user_inputed_text * title:* user_inputed_text *" 我需要像PreparedStatement这样的东西,但我在solrj库中找不到类似的东西。如何构建不会引起注入的查询?如何使字符串由用户输入 - \ user_input_text \ safe?

我正在使用连接构建查询。当我有,例如这段代码:

public String buildQuery(String userInputedText) {
    String query = "author:*" + userInputedText + "* OR title:*" + userInputedText + "*";
}

然后用户可以注入一些子查询并接收结果,但不受限制。 例如,输入的字符串是:"或标题:"。所以,整个查询将是: 作者:* OR标题:* OR标题:* OR标题:*

在这种情况下,用户会收到所有结果(它们不受限制)并传递模式作者:*?* OR title:*?*。

1 个答案:

答案 0 :(得分:6)

请考虑使用内置的solrj ClientUtils实用程序类。通过它你可以逃脱userInputText

String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText)

有关详细信息,请查看queryparser syntax页面。