负责的项目在一期收尾阶段,后面需要配合通过三级等保,所以重心在跟进三级等保验证。检测厂商提供第一轮的漏洞报告,看了一下需要修改的地方,对于应用而言有一项是手机号数据需要落库加密和页面脱敏处理。为了不影响客户竣工就开始了处理。
后端数据加密解密方案使用的AES,然后统计了一下应用牵连到手机号地方业务蛮多,盲目的代码一个一个加费时费力遂想到的方案就是aop处理。开始定在Service层的入参出参,之后分析加密解密跨度大 内部调用会有漏掉导致未解密。所以定的方案就是aop处理mapper层代码。
然后出现个问题,spring aop不能拦截mybatis层接口,排查后发现不能生效的原因是mybatis本身会使用jdk动态代理来为我们生成一个Mapper接口的实现类,而aop是在对这个Mapper使用cglib代理。我们项目当前框架使用的是springboot1.x,看网友分析2.x的可以,对于现在而言轻易改底层不合理,方案pass。
对于dao层处理,aop目前不行,我就想到了mybatis拦截器。
在mybatis中可被拦截的类型有四种(按照拦截顺序):
- Executor:拦截执行器的方法。
- ParameterHandler:拦截参数的处理。
- ResultSetHandler:拦截结果集的处理。
- StatementHandler:拦截Sql语法构建的处理。
对于入参加密 选择ParameterHandler,对参数进行拦截修改处理
@Component |
对于出参解密使用ResultSetHandler的handleResultSets方法作为sql执行之后的结果拦截过滤
@Component |
为了快速排除干扰项,定义了2个自定义注解 一个类上标识@EncryptEntity 一个需要加密解密的字段上标识@EncryptField
以上处理后实现了对敏感数据落库加密解密
- 本文标题: 记一次三级等保漏洞修复问题处理
- 文章作者: sherryriver(木木三可)
- 发布时间: 2022.06.14
- 本文链接: https://sherryriver.github.io/2022/06/14/记一次三级等保漏洞修复问题处理/
- 许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。