我有一个命中java应用程序(SOLR)的查询。
查询的一个特定模式就像
http:server:port/app/select?q=(skunum:(2809553163000\+OR+09552883000\+OR+09553124000\))
如果您注意到每个项目编号的末尾都有一个转义字符。
我需要阻止此类查询才能点击我的应用。
我只需要知道如何识别这些特定的查询?有没有模式匹配条款?
答案 0 :(得分:1)
似乎从根本上说问题是确定字符串(在这种情况下是URL查询字符串)是否包含任何一组字符(转义字符)。我可以想到两种方法。一种是使用regular expression:
// ignore queries containing a, b, or c in the query string
if (url.getQuery().matches("[abc]"))
{
// ignore query
}
另一种方法是使用一个迭代字符串的函数来查找给定集合中的字符。我找到了bool ContainsAny(String, char[])
示例方法here。正则表达式是一种更通用的解决方案(并且使用起来有点棘手,特别是对于初学者而言),但在这种情况下ContainsAny()
方法也足够了。
更大的问题是输入验证。这不仅对于正确的应用功能而且对于安全性也很重要。通过任何方式,您可以采取任何步骤来确保您处理的所有查询都符合您的规范并包含有意义的值。寻找Java或SOLR提供的API来促进这一点。
最后一点:在你提供的例子中,我不清楚是否存在真正的逃避现象。存在于其中。我在每个数字后面看到反斜杠(\
),但这些不一定是转义,因为后面的字符(+
和)
)不需要转义。实际上,网址中的空格通常会映射到+
字符或%20
。