我有一个命中 Java 应用程序 (SOLR) 的查询。
查询的一种特定模式如下
http:server:port/app/select?q=(skunum:(2809553163000\+OR+09552883000\+OR+09553124000\))
如果您注意到每个项目编号的末尾都有一个转义字符。
我需要阻止此类查询访问我的应用。
我只需要知道如何识别这些特定查询?有没有模式匹配子句?
最佳答案
从根本上看,问题似乎在于确定一个字符串(在本例中为 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 来促进这一点。
最后一点:在您提供的示例中,我不清楚其中是否存在真正的“转义”。我在每个数字后看到反斜杠 (\
),但这些不一定是转义符,因为后面的字符 (+
和 )
) 不需要逃脱。事实上,URL 中的空格通常映射到 +
字符,或 %20
。
关于java - 识别转义关键字并在java中阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088350/