我们有一个接受用户 URL 的应用程序。该数据需要验证,我们为此目的使用 ESAPI。但是,我们正在努力处理包含 & 符号的 URL。
当 ESAPI 在验证之前规范化数据时,就会出现问题。URL 中的 &pid=123 例如变成 πd=123。由于 π 未列入白名单,因此验证失败。
我尝试过对其进行编码,但 ESAPI 比这更智能,并且会进行规范化以避免双重编码和混合编码。我在这里有点难过,我不知道如何继续。
我们有一个接受用户 URL 的应用程序。该数据需要验证,我们为此目的使用 ESAPI。但是,我们正在努力处理包含 & 符号的 URL。
当 ESAPI 在验证之前规范化数据时,就会出现问题。URL 中的 &pid=123 例如变成 πd=123。由于 π 未列入白名单,因此验证失败。
我尝试过对其进行编码,但 ESAPI 比这更智能,并且会进行规范化以避免双重编码和混合编码。我在这里有点难过,我不知道如何继续。
我遇到了同样的问题。就我而言,对于字符串 \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 的最后一个参数关闭默认打开的内部规范化。
我希望这有帮助。