ESAPI编码在UI上提供不同的输出

时间:2019-07-12 06:34:32

标签: java spring-mvc xss esapi

我试图在我的spring-mvc项目中实现ESAPI编码以防止XSS攻击。我的方法是在将输入发送回响应之前,我将使用ESAPI.encoder()对其进行编码,以便在页面响应中对input属性进行编码。

我的假设是,当我返回编码响应时,在页面响应中,我将获得编码字符,在输入字段中,我将获得普通字符,但是我的输入字段也设置了编码字符。

下面是我在发送响应之前在控制器中编写的示例代码。

model.addAttribute("input", setValue(ESAPI.encoder().encodeForHTMLAttribute(getInput())));
return "reports/salaryreport";

我希望浏览器能够自动解码这些编码的字符并显示原始输入,而它总是在输入字段中显示修改/编码的值。

我在这里做错什么了,还是我的期望不正确?

谢谢。

1 个答案:

答案 0 :(得分:0)

您正在将ESAPI编码的值传递给某种Web框架。

我的钱是,浏览器收到的金额等于NZIC123 !"#$^?%,这就是为什么您会收到这种行为。

我在Edge,IE11,Chrome 75和Firefox上测试了NZIC123 !"#$^?%。它可以在所有4个实例中正确呈现。

调用model.addAttribute()可能已经在提供属性编码,而您得到的行为是因为它正在编码ESAPI提供的“&”号。