【发布时间】:2019-07-12 06:34:32
【问题描述】:
我正在尝试在我的 spring-mvc 项目中实现 ESAPI 编码以防止 XSS 攻击。我的方法是在将输入发送回响应之前,我将使用 ESAPI.encoder() 对其进行编码,以便在页面响应中对输入属性进行编码。
我的假设是,当我返回编码响应时,在我的页面响应中我将获得编码字符,在我的输入字段中我将获得普通字符,但我的输入字段也设置了编码字符。
以下是我在发送响应之前在控制器中编写的示例代码。
model.addAttribute("input", setValue(ESAPI.encoder().encodeForHTMLAttribute(getInput())));
return "reports/salaryreport";
我希望浏览器自动解码这些编码字符并显示原始输入,而它总是在输入字段中显示修改/编码的值。
是我做错了什么,还是我的预期不正确?
先谢谢了。
【问题讨论】:
-
如果您提供输入/输出示例以及您实际期望发生的情况,则更容易回答!
-
我在 JSP 中有一个输入字段,我提供输入 "NZIC123 !"#$^?%",这将传递给控制器中的控制器,我正在对其进行编码,然后通过将它添加到模型中,在输入字段的前端现在我得到“NZIC123 !#$^?%”。我印象深刻该浏览器会自动解码它,我会得到“NZIC123!”#$^?%”,但看起来我的假设是错误的
-
这听起来像是一个愚蠢的问题,但是是什么让它对浏览器产生影响呢?我已经看到当一个值以某种方式被双重编码时会发生这种情况。
-
我同意,这是一个愚蠢的问题和假设,我在控制器中使用 ESAPI encodeHTMLAttribute 编码并希望浏览器自动解码
-
所以这不是一个愚蠢的问题。我刚刚在一个简单的 HTML 页面上使用了您的输出,
NZIC123 !"#$^?%在 chrome、firefox、Edge 和 IE11 中正确呈现。您的 Web 框架中的某些内容正在添加额外的编码层。从浏览器的开发人员工具或视图->源中获取有问题的数据值。
标签: java spring-mvc xss esapi