正在显示
1 个修改的文件
包含
10 行增加
和
1 行删除
| @@ -86,6 +86,9 @@ public class ExcelUtil<T> | @@ -86,6 +86,9 @@ public class ExcelUtil<T> | ||
| 86 | { | 86 | { |
| 87 | private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); | 87 | private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); |
| 88 | 88 | ||
| 89 | + public static final String[] FORMULA_STR = { "=", "-", "+", "@" }; | ||
| 90 | + | ||
| 91 | + | ||
| 89 | /** | 92 | /** |
| 90 | * Excel sheet最大行数,默认65536 | 93 | * Excel sheet最大行数,默认65536 |
| 91 | */ | 94 | */ |
| @@ -710,7 +713,13 @@ public class ExcelUtil<T> | @@ -710,7 +713,13 @@ public class ExcelUtil<T> | ||
| 710 | { | 713 | { |
| 711 | if (ColumnType.STRING == attr.cellType()) | 714 | if (ColumnType.STRING == attr.cellType()) |
| 712 | { | 715 | { |
| 713 | - cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); | 716 | + String cellValue = Convert.toStr(value); |
| 717 | + // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。 | ||
| 718 | + if (StringUtils.containsAny(cellValue, FORMULA_STR)) | ||
| 719 | + { | ||
| 720 | + cellValue = StringUtils.replaceEach(cellValue, FORMULA_STR, new String[] { "\t=", "\t-", "\t+", "\t@" }); | ||
| 721 | + } | ||
| 722 | + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); | ||
| 714 | } | 723 | } |
| 715 | else if (ColumnType.NUMERIC == attr.cellType()) | 724 | else if (ColumnType.NUMERIC == attr.cellType()) |
| 716 | { | 725 | { |
-
请 注册 或 登录 后发表评论