我的一个 REST API 有一个名为“partners”的查询参数,它是一个整数列表,因此您可以在 URL 中指定多个值。作为 XSS 攻击的预防措施,我使用 ESAPI 去除输入中的恶意内容。这是问题所在:
我注意到 ESAPI 编码器 cannonicalize 方法(它使用默认编解码器:HTMLEntityCodec、PercentCodec、JavaScriptCodec)会更改查询参数值,因为它认为 &p 或 &pa 是某种编码。请参阅下面的示例
就像是
http://localhost:8080/product?partner=1
按预期工作。
另一方面,像
http://localhost:8080/product/?pidentity=1&pidentity=2
规范化后的输入变为
`pidentity=1πdentity=2`
框架无法解析,因为它认为这只是一个带有 2 个拆分器的查询参数。
如果请求 url 像
http://localhost:8080/product?partner=1&partner=2
规范化后的输入变为
partner=1∂rtner=2
&pa 更改为 '∂'。
正如您可能猜到的,我尝试更改查询参数的名称并且效果很好(可能是因为没有任何相应的编码)。有没有人见过,或者可以指导我是什么导致了这种行为?这听起来像是我的经验不足,但为了确保防止 XSS 攻击,我不确定是否应该尝试从默认编码器中删除任何编解码器。