ESAPI规范化畸形url

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

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

我已经尝试过对它进行编码,但是ESAPI比这更聪明,并且规范化以避免双重编码和混合编码。 我有点难过,我不知道该怎么办。

此问题是ESAPI中的已知错误 。 我开始致力于解决它,但由于我不知道补丁什么时候会被提交,我只能在你对OP的评论中引用你解决方法,我在这里使用java.net.URI链接了类似的答案。 javax.ws.rs.core.UriBuilder用于解析/分解URL,规范化各个部分,然后重构URL。 我会在这里重新发布链接。 我提出的例子是在OP切换主题问题后的问题的后半部分。

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

案例1:规范化(字符串) – > INTRUSION – 在\ fgdf \ gghfh \ fgh \ dff中检测到多个(2x)编码

案例2:canonicalize(string,false) – > input = fgdfgghfhfghdff在这种情况下,由于这个原因,它因字符串validation失败了吗? 字符不是白色字符列表的一部分。

我终于成功了。 以下是代码:

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

最后一个false参数将关闭默认启用的内部规范化。

我希望这有帮助。