检测到Referer标头中的URL使用多种编码

时间:2019-04-12 12:23:43

标签: java servlets http-headers owasp esapi

使用owasp.esapi过滤传入的请求参数和标头,我遇到了一个问题,其中引荐标头显然包含被视为使用“多重编码”的值。

一个例子:

http://123.abc.xx/xyz/input.xhtml?server=http%3A%2F%2F123.abc.xx%3A7016%2Fxyz&o=1&language=en&t=a074faf3

不过,对我来说,该URL似乎已正确编码,并且对其进行解码可以生成一个完全可读且正确的URL。

那么,任何人都可以在这里解释问题以及如何解决吗?

在标头值上运行此方法时,ESAPI报告错误:

value = ESAPI.encoder().canonicalize(value);

输出:

 SEVERE: [SECURITY FAILURE] INTRUSION - Mixed encoding (2x) detected

1 个答案:

答案 0 :(得分:2)

事实上,是的。我已在即将发布的ESAPI版本中修复了该错误,但需要对API进行更改,也许其中的某个错误可能基于您此处的数据而存在。

简而言之,在我修复之前,ESAPI只是针对URI进行了正则表达式。有关此问题的大量错误报告是,URI不是一种常规语言。他们本身就是一种语言。因此,将发生的情况是,所讨论的URI的参数将仅包含HTML实体,某些随机数据变体将与已知的HTML实体(例如&param=foo)对齐,例如将被解释为实体¶是段。关于ASCII和Unicode(非bmp编码),也存在一些问题。

无论如何,我们的下一个库Encoder.getCanonicalizedURI();

的候选版本中都会使用一种新方法。

这将是安全的正则表达式,因为它将被分解并检查混合/多重编码。您当前使用的方法现已弃用。