如果您索引敏感信息,则在允许用户使用原始查询时需要小心。如果您的表单没有 XSRF 保护,则可以使用跨域搜索计时攻击从索引中提取信息 [1]。
如果您允许原始查询,它还可以允许用户通过输入缓慢的查询来 DOS 您的应用程序。
[1] https://www.idontplaydarts.com/2015/09/cross-domain-timing-attacks-against-lucene/
(PECL solr >= 0.9.2)
SolrUtils::queryPhrase — 准备一个来自未转义的 lucene 字符串的短语
str
lucene 短语。
返回包含在双引号中的短语。
如果您索引敏感信息,则在允许用户使用原始查询时需要小心。如果您的表单没有 XSRF 保护,则可以使用跨域搜索计时攻击从索引中提取信息 [1]。
如果您允许原始查询,它还可以允许用户通过输入缓慢的查询来 DOS 您的应用程序。
[1] https://www.idontplaydarts.com/2015/09/cross-domain-timing-attacks-against-lucene/
进行一些测试,似乎此函数也对输入进行了清理(在 1.0 以上的版本上测试)。并且术语“短语”与完整的查询不同,例如“FIELD:冒号后的右半部分是短语”。
因此,如果您想搜索 SOME_FIELD:some value 并带有转义字符,例如 +,则必须编写代码
$query = 'SOME_FIELD:' . SolrUtils::queryPhrase('some value with an escape character like +');
这将正确地对其进行转义,例如
some value with an escape character like \+
仅供参考。