概述
跨站脚本攻击漏洞,简称 XSS。Web 站点中的脚本不预先加 以清理直接将用户输入(通常是参数值)返回, 当在响应页面 中返回用户输入的 JavaScript 代码时,浏览器便会执行该代码。 攻击者往往利用该原理向网页中插入恶意代码,并生成恶意链接 诱使用户点击。当用户点击该连接时,便会生成对 Web 站点的 请求,其中的参数值含有恶意的 JavaScript 代码。如果 Web 站 点将这个参数值嵌入在响应的 HTML 页面中(这正是站点问题 的本质所在),恶意代码便会在用户浏览器中运行,达到攻击者 的目的。对于存在 XSS 漏洞的网站建议过滤用户输入的内容,检 查用户输入的内容中是否有非法内容。如<>(尖括号)、(" 引号)、 '(单引号)、%(百分比符号)、;(分号)、()(括号)、&、+(加号)等并严格控制输出。
解决方案
在Spring MVC中让所有的Controller继承该BaseController即可。
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
/**
* 控制器支持类
*/
public abstract class BaseController {
/**
* 初始化数据绑定
* 1. 将所有传递进来的String进行HTML编码,防止XSS攻击
*/
@InitBinder
protected void initBinder(WebDataBinder binder) {
// String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击
binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim()));
}
@Override
public String getAsText() {
Object value = getValue();
return value != null ? value.toString() : "";
}
});
}
}