解决Apache POI 代码问题漏洞时,缺少类的问题 (CTPageMar 等)

问题

先把问题放这
POI 依赖升级后很多类找不到了,比如设置页边距的CTPageMar,
Maven下载source下不下来,
4.1.1、4.1.2里一些类使用了CTPageMar等类,但是它包里又没这个类

代码漏洞告警

昨天项目代码被检测到POI高危漏洞

漏洞级别:高危漏洞名称:Apache POI 代码问题漏洞 漏洞介绍 Apache
POI是美国阿帕奇(Apache)软件基金会的一个开源函数库,它提供API给Java程序可对Microsoft
Office格式档案进行读和写。 Apache POI
4.1.0及之前版本中存在安全漏洞。攻击者可借助特制的文档利用该漏洞读取本地文件系统中或网络资源中的文件。

漏洞公告 升级至4.1.11或后续版本 推荐使用最新版5.0.0

现在引用的依赖是

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>ooxml-schmas</artifactId>
            <version>1.4</version>
        </dependency>

寻找高版本

让我升高级版本是吧,好,我去https://mvnrepository.com/上搜一搜ooxml-schmas
在这里插入图片描述
在这里插入图片描述
第二个已经是最新的1.4了,18年的,那没必要要了
在这里插入图片描述

第一个第三个的版本,看起来漏洞告警是推荐的版本,4.1.1和5.0.0

在这里插入图片描述

在这里插入图片描述

解决方案一:根据告警提示替换依赖

但是引入出现问题了,
依赖升级后很多类找不到了,比如设置页边距的CTPageMar,
Maven下载source下不下来,
4.1.1、4.1.2里一些类使用了CTPageMar等类,但是它包里又没这个类

引入依赖:
在这里插入图片描述
编译发现缺少类,我想可能是不兼容吧,但是为什么adNewPgMar返回值是这个类呢
在这里插入图片描述
返回值是这个类
在这里插入图片描述

jar中却没这个东西在这里插入图片描述
点击类进不去,下载source下不下来
搜索引用,看到一些类似的类,CTPageMargins,但是不是我要的,我写的是word文档,用的包路径是wordprocessingml下的,其他poi-ooxml-schemas包下的都是spreadsheet、drawingml,不对
在这里插入图片描述

离谱!
在这里插入图片描述

解决方案二:把缺少的类从旧包拷到本地

这个就属于有点自欺欺人了,行是行,但是我发现CTPageMar 拷到本地后,还有其他类缺少,是让我把整个旧包拷过来吗,不靠谱,放弃

解决方案三:终于找到靠谱的依赖

2021年的新包,一个full 一个lite,引入后发现lite还是缺少我要的类,但是full有!

在这里插入图片描述
在这里插入图片描述

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-full</artifactId>
            <version>5.0.0</version>
        </dependency>

终于找到你

在这里插入图片描述

总结

网上设置页边距的方法不多,大都是漏洞暴露出来之前的,做开发的人也不都会完全把相关文档协议吃透,也让后续修改的人不敢乱动代码结构。
我怀疑过高版本去除了低版本的类,但是又发现高版本还在用他们,但是却定位不到,最后还好有个2021年的包能用,就是方案三,如果没这个,我就用方案二凑合了,如果方案二不行,兼容搞不了,我再考虑重构代码,研究一下高版本怎么设置页边距。

最后
poi-ooxml-full 5.0.0 有CTPageMar

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值