如何使用 XSS 过滤器后还原 HTML 输入?
为了防止跨站脚本攻击,xss 过滤器会对非法字符进行转义,导致页面显示不正确。为了解决这个问题,我们有两种方法:
在页面上转义
在页面渲染的代码中使用 html 解码器,将转义后的字符还原为原始输入。
java 代码中转义
使用 spring security 的 responsebodyadvice 切面,在返回响应之前对 json 内容进行 html 解码。这种方法需要在 java 代码中配置以下内容:
@Configuration public class XssConverterConfiguration { @Bean public ResponseBodyAdvice converter() { return new XssConverter(); } } public class XssConverter implements ResponseBodyAdvice { @Override public boolean supports(MethodParameter returnType, Class converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body instanceof String) { return HtmlUtils.htmlUnescape((String) body); } return body; } }