使用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
答案 0 :(得分:2)
事实上,是的。我已在即将发布的ESAPI版本中修复了该错误,但需要对API进行更改,也许其中的某个错误可能基于您此处的数据而存在。
简而言之,在我修复之前,ESAPI只是针对URI进行了正则表达式。有关此问题的大量错误报告是,URI不是一种常规语言。他们本身就是一种语言。因此,将发生的情况是,所讨论的URI的参数将仅包含HTML实体,某些随机数据变体将与已知的HTML实体(例如¶m=foo
)对齐,例如将被解释为实体¶
是段。关于ASCII和Unicode(非bmp编码),也存在一些问题。
无论如何,我们的下一个库Encoder.getCanonicalizedURI();
这将是安全的正则表达式,因为它将被分解并检查混合/多重编码。您当前使用的方法现已弃用。