Joh*_*ohn 7 solr code-injection solrj
查询HttpSolrServer.
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(q);
QueryResponse queryResponse = solrServer.query(solrQuery);
Run Code Online (Sandbox Code Playgroud)
我需要构建一个solr查询,比如"author:*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 + "*";
}
Run Code Online (Sandbox Code Playgroud)
然后用户可以注入一些子查询并接收结果,但不受限制.例如,输入的字符串是:"OR title:".所以,整个查询将是:作者:*OR标题:*OR标题:*OR标题:*
在这种情况下,用户收到所有结果(它们不受限制)并传递模式作者:*?*OR title:*?*.
请考虑使用内置的solrj ClientUtils
实用程序类.通过它你可以逃脱userInputText
String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText)
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看queryparser语法页面.