solr 查询参数说明备忘

http://blog.chenlb.com/topics/548.html

 

 

常用

  • q - 查询字符串,必须的。
  • fl - 指定返回那些字段内容,用逗号或空格分隔多个。
  • start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
  • rows - 指定返回结果最多有多少条记录,配合start来实现分页。
  • sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降序。
  • wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。
  • fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。官方文档:http://wiki.apache.org/solr/CommonQueryParameters#head-6522ef80f22d0e50d2f12ec487758577506d6002

不常用

  • q.op - 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定
  • df - 默认的查询字段,一般默认指定
  • qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。

其它

  • indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
  • version - 查询语法的版本,建议不使用它,由服务器指定默认值。
### 注入原理 Solr查询参数注入恶意代码的原理主要源于对用户输入的查询参数未进行严格的过滤和验证。当用户在搜索框或通过API接口提交查询参数时,若应用程序直接将这些参数拼接到Solr查询语句中,而没有对特殊字符进行处理,攻击者就可以利用这一漏洞注入恶意代码。 例如,在Solr中常见的查询语句格式为 `q=field:value`,如果应用程序将用户输入的 `value` 部分直接拼接进查询语句,攻击者可以输入包含特殊字符的内容,如 `*:*` (表示查询所有文档),或者构造更为复杂的恶意查询语句,利用Solr的语法特性来执行非法操作,像绕过访问控制、获取敏感数据等。 ### 防范措施 - **输入验证和过滤**:对用户输入的查询参数进行严格的验证和过滤,只允许合法的字符和格式通过。可以使用白名单机制,明确规定允许的字符集和查询格式,拒绝包含非法字符的输入。例如,只允许字母、数字和特定的符号,对于其他字符进行过滤或拒绝。 ```python import re def validate_query(query): pattern = r'^[a-zA-Z0-9 :]+$' if re.match(pattern, query): return query else: return None user_query = "malicious*:*query" validated_query = validate_query(user_query) if validated_query: # 执行查询 pass else: # 拒绝非法输入 pass ``` - **使用参数查询**:避免直接将用户输入的参数拼接到查询语句中,而是使用Solr提供的参数查询功能。参数查询会自动对输入进行转义和处理,防止恶意代码注入。不同的编程语言和Solr客户端库有不同的实现方式,以下是Java的示例: ```java import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; public class SolrQueryExample { public static void main(String[] args) throws Exception { String solrUrl = "http://localhost:8983/solr/your_core"; HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build(); String userInput = "valid_query"; SolrQuery query = new SolrQuery(); query.setQuery("field:" + userInput); // 这里可以使用参数化方式 QueryResponse response = solrClient.query(query); solrClient.close(); } } ``` - **权限控制**:对Solr的访问进行严格的权限控制,只授予应用程序必要的查询权限,避免使用具有过高权限的账户进行查询操作。同时,限制对敏感数据的访问,确保只有授权的用户和操作才能获取这些数据。 - **定期更新和监控**:及时更新Solr到最新版本,因为新版本通常会修复已知的安全漏洞。同时,对Solr的日志进行监控,及时发现异常的查询行为,如频繁的异常查询、大量的数据获取请求等,并采取相应的措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值