Referer标头中的URL被检测为使用多个编码

问题描述 投票:1回答:1

使用owasp.esapi来过滤传入的请求参数和标题,我在一个问题上磕磕绊绊,显然Referer标题包含一个被认为是使用“多重编码”的值。

一个例子:

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
java servlets http-headers owasp esapi
1个回答
2
投票

事实上是的。我在即将发布的ESAPI版本中修复了这个错误,但它需要进行API更改,也许可能会根据您的数据在此处发生错误。

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

无论如何,我们的下一个库Encoder.getCanonicalizedURI();将会有一种新方法用于候选版本

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

© www.soinside.com 2019 - 2024. All rights reserved.