跨站脚本攻击漏洞

概述

跨站脚本攻击漏洞,简称 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() : "";
			}
		});
	}
	
}

猜你喜欢

转载自my.oschina.net/voole/blog/1635845