在搜索字段时转义 Solr 查询中的特殊字符?
Escape special characters in Solr query while searching on fields?
Solr 查询:fooField:foovalue OR barField:barValue
此查询可以是来自浏览器的查询覆盖,这有潜在的注入攻击风险。但是转义像 :
和空格这样的特殊字符并没有达到预期的 returns 结果。
有没有办法逃避查询并在 solr 字段上搜索以获得所需的结果?
edismax
查询处理程序是为这种情况而设计的 - 如果您不希望用户能够自己附加字段名称,请使用 qf
告诉 Solr 它应该附加哪些字段搜索,然后正确转义查询并将其作为原始文本发送到 q
参数中。
如果您想要在不同的字段中搜索不同的值,您必须转义每个值并在其前面加上您显示的字段名称。
为了防止这种情况下的注入攻击,考虑到查询字符串可能被覆盖,您需要相应地过滤用户输入:
Web 服务器应显示一个搜索表单,在从中发出 Solr 请求之前必须对其进行验证。此表单,无论 UI 中的输入如何,一旦提交,不应将查询字符串直接传递给 Solr,而是要解析和检查多个字段输入:
?fieldA=terms&fieldb=otherterms
用户不应搜索任意字段名称:在验证处理程序中,您需要检查 fieldname
是否确实可搜索。这意味着,例如,如果 [fieldA, fieldB, fieldC]
是用户可以合法查询的唯一字段,则应丢弃除这些字段之外的任何字段:
?fieldA=terms&inject:ed=willBeDiscarded
如果您需要用户能够在不同字段中搜索不同的值 - 如果您不能使用 qf
- UI 可能有助于区分 field:<terms>
中的冒号和 field:<terms>
中的冒号field:<termsContainingColon>
,在这种情况下,您可能希望通过可搜索字段输入一个文本,以便用户输入完全限于每个字段的值。
Solr 查询:fooField:foovalue OR barField:barValue
此查询可以是来自浏览器的查询覆盖,这有潜在的注入攻击风险。但是转义像 :
和空格这样的特殊字符并没有达到预期的 returns 结果。
有没有办法逃避查询并在 solr 字段上搜索以获得所需的结果?
edismax
查询处理程序是为这种情况而设计的 - 如果您不希望用户能够自己附加字段名称,请使用 qf
告诉 Solr 它应该附加哪些字段搜索,然后正确转义查询并将其作为原始文本发送到 q
参数中。
如果您想要在不同的字段中搜索不同的值,您必须转义每个值并在其前面加上您显示的字段名称。
为了防止这种情况下的注入攻击,考虑到查询字符串可能被覆盖,您需要相应地过滤用户输入:
Web 服务器应显示一个搜索表单,在从中发出 Solr 请求之前必须对其进行验证。此表单,无论 UI 中的输入如何,一旦提交,不应将查询字符串直接传递给 Solr,而是要解析和检查多个字段输入:
?fieldA=terms&fieldb=otherterms
用户不应搜索任意字段名称:在验证处理程序中,您需要检查
fieldname
是否确实可搜索。这意味着,例如,如果[fieldA, fieldB, fieldC]
是用户可以合法查询的唯一字段,则应丢弃除这些字段之外的任何字段:?fieldA=terms&inject:ed=willBeDiscarded
如果您需要用户能够在不同字段中搜索不同的值 - 如果您不能使用 qf
- UI 可能有助于区分 field:<terms>
中的冒号和 field:<terms>
中的冒号field:<termsContainingColon>
,在这种情况下,您可能希望通过可搜索字段输入一个文本,以便用户输入完全限于每个字段的值。