当前位置:   article > 正文

java 防止js注入_java 防止JS注入(使用ESAPI进行编码)

org.owasp.esapi.encoder

今天在做报表导入的时候遇到测试在excel数据里面填了一段js代码,导致数据回显到页面的时候弹一个框出来,这个框我想大家都懂了,又恰好逢项目在做代码安全扫描,

扫描工具使用的是Fortify

安全工具推荐使用ESAPI.encoder().encodeForHTML来对html字符串进行编码,那我们就来开始尝试吧。

1. 引入esapi依赖

org.owasp.esapi

esapi

2.2.0.0

log4j

log4j

1.2.17

2. 引入esapi配置文件

配置文件可从github上获取 https://github.com/ESAPI/esapi-java-legacy

找到对应版本的分支,以zip形式下载源码到本地,解压

找到以下俩个文件复制到项目的resource目录下,具体配置可查看配置文件的注释

a020bf76fcbe3013a9ad95fa8494588c.png

这俩个文件在源码中路径: esapi-java-legacy-2.2.0.0\configuration\esapi

3. 编写代码

如果我们返回的字符串是一段html,但只解析js,可以参考以下方式:

@GetMapping("/hi")

public String hi() {

StringBuilder sb = new StringBuilder();

sb.append("

aaaaa
")

.append(ESAPI.encoder().encodeForHTML(""));

//String jsCode = "

aaaaa
";

//String jsEncoder = ESAPI.encoder().encodeForHTML(jsCode);

return sb.toString();

}

页面展示效果:

babced7730a5a08c0e92fcbb4d29172d.png

中间的js代码就会以文本的形式展示。

4. encodeForHTML()源码解析:

46823800d060559f9b1cd3d1406bc849.png

该方法执行最终会根据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”);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/150460?site
推荐阅读
相关标签
  

闽ICP备14008679号