java - 识别转义关键字并在java中阻止

标签 java algorithm jakarta-ee

我有一个命中 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/

相关文章:

java - sun-ejb-jar.xml 和 ejb-jar.xml 版本 3.1 的文档在哪里?

java - 使用逻辑 AND 处理 hibernate 多个条件

java - 生成 wsdl 时出现 JAXWS 异常

java - 使用 spring DSL 中的 controlBus 和参数

algorithm - 最佳任务顺序

algorithm - 检查一组集合是否成对不相交

java - 选择什么基本算法来构建排序列表?以及如何在添加到排序列表期间获得最佳性能?

oracle - 需要使用legacy PLSQL with DBLink call,在XA事务中,不能使用共享连接

java - 如何让用户输入他们的信息?

java - Java 中有用于哈希的 hexToString 实现方法吗?