赞
踩
今天在做报表导入的时候遇到测试在excel数据里面填了一段js代码,导致数据回显到页面的时候弹一个框出来,这个框我想大家都懂了,又恰好逢项目在做代码安全扫描,
扫描工具使用的是Fortify
安全工具推荐使用ESAPI.encoder().encodeForHTML来对html字符串进行编码,那我们就来开始尝试吧。
1. 引入esapi依赖
org.owasp.esapi
esapi
2.2.0.0
log4j
1.2.17
2. 引入esapi配置文件
配置文件可从github上获取 https://github.com/ESAPI/esapi-java-legacy
找到对应版本的分支,以zip形式下载源码到本地,解压
找到以下俩个文件复制到项目的resource目录下,具体配置可查看配置文件的注释
这俩个文件在源码中路径: esapi-java-legacy-2.2.0.0\configuration\esapi
3. 编写代码
如果我们返回的字符串是一段html,但只解析js,可以参考以下方式:
@GetMapping("/hi")
public String hi() {
StringBuilder sb = new StringBuilder();
sb.append("
.append(ESAPI.encoder().encodeForHTML(""));
//String jsCode = "
//String jsEncoder = ESAPI.encoder().encodeForHTML(jsCode);
return sb.toString();
}
页面展示效果:
中间的js代码就会以文本的形式展示。
4. encodeForHTML()源码解析:
该方法执行最终会根据unicode编码从map对象中获取对应的替代字符来替换js中的特定字符。
该map中包含以下数据:
private static synchronized Map
mkCharacterToEntityMap() {
Map map = new HashMap(252);
map.put(34, “quot”);
map.put(38, “amp”);
map.put(60, “lt”);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。