2

我们有一个接受用户 URL 的应用程序。该数据需要验证,我们为此目的使用 ESAPI。但是,我们正在努力处理包含 & 符号的 URL。

当 ESAPI 在验证之前规范化数据时,就会出现问题。URL 中的 &pid=123 例如变成 πd=123。由于 π 未列入白名单,因此验证失败。

我尝试过对其进行编码,但 ESAPI 比这更智能,并且会进行规范化以避免双重编码和混合编码。我在这里有点难过,我不知道如何继续。

4

2 回答 2

1

我遇到了同样的问题。就我而言,对于字符串 \fgdf\gghfh\fgh\dff,canonicalize 方法将其形成为:

案例 1:canonicalize(string) --> INTRUSION - 在 \fgdf\gghfh\fgh\dff 中检测到多个 (2x) 编码

案例 2:canonicalize(string, false) --> input=fgdfgghfhfghdff 在这种情况下,它通过字符串验证失败了?字符不是字符白名单的一部分。

我终于设法让它工作了。下面是代码:

    value = ESAPI.encoder().encodeForURL(value);
    value = value.replaceAll("", "");
    isSafe = validator.isValidInput("APPNAME", value, "URLSTRING", 255, true, false);

false 的最后一个参数关闭默认打开的内部规范化。

我希望这有帮助。

于 2014-04-28T15:14:42.383 回答
0

此问题是 ESAPI 中的一个已知错误。我开始努力解决它,但由于我不知道何时提交补丁,我只能在我对 OP 的评论中向您推荐一个解决方法,在这里我链接了一个类似的答案,使用java.net.URIjavax.ws.rs.core.UriBuilder解析/分解URL,规范化片段,然后重建 URL。我会在这里重新发布链接。我提出的示例是在OP在问题中切换主题之后的问题的后半部分。

于 2014-05-11T22:32:22.190 回答