先简单说一下 csv 注入,导出单元格中存在计算符号,会被解析成公式,可能会在 office 中拉起其他程序,比如 cmd,可参考(4条消息) CSV注入漏洞原理及利用教程_丶没胡子的猫的博客-CSDN博客_?id=81338265.csv入侵
我们这次需要实现的是,在解析导出单元格的时候,匹配检验下有没有这四个特殊字符,如果存在直接修改为 tab(跳转到下一个单元格)
String cellValue =Convert.toStr(value);// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。if(StringUtils.containsAny(cellValue,FORMULA_STR)){
cellValue =StringUtils.replaceEach(cellValue,FORMULA_STR,newString[]{"\t=","\t-","\t+","\t@"});}
cell.setCellValue(StringUtils.isNull(cellValue)? attr.defaultValue(): cellValue + attr.suffix());
这块实现主要涉及到用 common-utils 的的两个工具方法
- StringUtils.containsAny()
- StringUtils.replaceEach()
版权归原作者 周周写不完的代码 所有, 如有侵权,请联系我们删除。