我试图在我的spring-mvc项目中实现ESAPI编码以防止XSS攻击。我的方法是在将输入发送回响应之前,我将使用ESAPI.encoder()对其进行编码,以便在页面响应中对input属性进行编码。
我的假设是,当我返回编码响应时,在页面响应中,我将获得编码字符,在输入字段中,我将获得普通字符,但是我的输入字段也设置了编码字符。
下面是我在发送响应之前在控制器中编写的示例代码。
model.addAttribute("input", setValue(ESAPI.encoder().encodeForHTMLAttribute(getInput())));
return "reports/salaryreport";
我希望浏览器能够自动解码这些编码的字符并显示原始输入,而它总是在输入字段中显示修改/编码的值。
我在这里做错什么了,还是我的期望不正确?
谢谢。
答案 0 :(得分:0)
您正在将ESAPI编码的值传递给某种Web框架。
我的钱是,浏览器收到的金额等于NZIC123 !"#$^?%
,这就是为什么您会收到这种行为。
我在Edge,IE11,Chrome 75和Firefox上测试了NZIC123 !"#$^?%
。它可以在所有4个实例中正确呈现。
调用model.addAttribute()
可能已经在提供属性编码,而您得到的行为是因为它正在编码ESAPI提供的“&”号。