您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

基于 log4j2 插件实现统一日志脱敏,性能远超正则替换

时间:2023-06-05 12:24:43  来源:今日头条  作者:老马啸西风

前言

金融用户敏感数据如何优雅地实现脱敏?

日志脱敏之后,无法根据信息快速定位怎么办?

经过了这两篇文章之后,我们对日志脱敏应该有了一定的理解。

但是实际项目中,我们遇到的情况往往更加复杂:

1)项目的 JAVA bean 定义不规范,大量接口使用 map。

2)历史项目众多,改造成本巨大。

种种原因,导致使用注解的方式耗费大量的时间。但是一般给我们改造的时间是有限的。

那么,有没有一种方法可以统一对敏感信息进行脱敏处理呢?

答案是有的,我们可以基于 log4j2 实现自己的脱敏策略,统一实现日志的脱敏。

log4j2 Rewrite

我们可以基于 log4j2 RewritePolicy 统一使用脱敏策略。

本项目自 V1.2.0 添加对应支持,后续将提升对应的可拓展性。

说明:如果使用 slf4j 接口,实现为 log4j2 时也是支持的。

使用入门

maven 引入

引入核心脱敏包。

<dependency>
    <groupId>com.Github.houbb</groupId>
    <artifactId>sensitive-log4j2</artifactId>
    <version>1.2.1</version>
</dependency>

其他的一般项目中也有,如 log4j2 包:

<dependency>
    <groupId>org.Apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j2.version}</version>
</dependency>

log4j2.xml 配置

例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" packages = "com.github.houbb.sensitive.log4j2.rewrite">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
        </Console>
        <Rewrite name="rewrite">
            <AppenderRef ref="Console"/>
            <SensitiveRewritePolicy/>
        </Rewrite>
    </Appenders>
    <Loggers>
        <Root level="DEBUG">
            <AppenderRef ref="rewrite" />
        </Root>
    </Loggers>
</Configuration>

几个步骤:

1.

指定 package 为 packages = "com.github.houbb.sensitive.log4j2.rewrite"

2.

按照 log4j2 Rewrite 规范,指定重写策略为 SensitiveRewritePolicy

3.

输出时,直接指定为对应的重写之后的结果 <AppenderRef ref="rewrite" />

测试

正常的日志打印:

private static final String TEST_LOG = "mobile:13088887777; bankCard:6217004470007335024, emAIl:mahuateng@qq.com, amount:123.00, " +
        "IdNo:340110199801016666, name1:李明, name2:李晓明, name3:李泽明天, name4:山东小栗旬" +
        ", birthday:20220517, GPS:120.882222, IPV4:127.0.0.1, address:中国上海市徐汇区888号;";


logger.info(TEST_LOG);

自动脱敏效果如下:

mobile:130****7777|9FC4D36D63D2B6DC5AE1297544FBC5A2; bankCard:6217***********5024|444F49289B30944AB8C6C856AEA21180, email:mahu*****@qq.com|897915594C94D981BA86C9E83ADD449C, amount:123.00, IdNo:3****************6|F9F05E4ABB3591FC8EA481E8DE1FA4D6, name1:李*|15095D14367F7F02655030D498A4BA03, name2:李**|035E3C0D1A0410367FE6EB8335B2BFDE, name3:李泽**|B87138E5E80AEC87D2581A25CAA3809D, name4:山东***|6F2178D34BC7DD0A07936B5AFF39A16F, birthday:********|1F88D983FAFC50022651122B42F084A0, GPS:**********|E281A9A52DE915154285148D68872CA2, IPV4:127******|F528764D624DB129B32C21FBCA0CB8D6, address:中国上海市徐******|821A601949B1BD18DCBAAE27F2E27147;

ps: 这里是为了演示各种效果,实际默认对应为 1,2,3,4 这几种策略。

log4j2 配置定制化

为了满足各种用户的场景,在 V1.2.1 引入了 SensitiveRewritePolicy 策略的可配置化。

默认配置

log4j2 配置中,SensitiveRewritePolicy 配置默认等价于

<SensitiveRewritePolicy
        prefix=":='""
        scanList = "1,2,3,4"
        replaceList = "1,2,3,4"
        defaultReplace = "12"
        replaceHash = "md5"
/>

属性说明

SensitiveRewritePolicy 策略的属性说明。

属性

说明

默认值

备注

prefix

需要脱敏信息的匹配前缀

:='"

降低误判率

replaceHash

哈希策略模式

md5

支持 md5/none 两种模式

scanList

敏感扫描策略列表

1,2,3,4

1~10 内置的10种敏感信息扫描策略,多个用逗号隔开

replaceList

敏感替换策略列表

1,2,3,4

1~10 内置的10种敏感信息替换策略,多个用逗号隔开

defaultReplace

敏感替换默认策略

12

1~13 内置的13种敏感信息替换策略,指定一个。当列表没有匹配时,默认使用这个

其中 1-13 的内置策略说明如下:

策略标识

说明

1

手机

2

身份证

3

银行卡

4

邮箱

5

中国人名

6

出生日期

7

GPS

8

IPV4

9

地址

10

护照

11

匹配任意不掩盖

12

匹配任意半掩盖

13

匹配任意全掩盖

不足之处

这里的策略自定义和 log4j2 的插件化比起来,确实算不上强大,但是可以满足 99% 的脱敏场景。

后续有时间考虑类似 log4j2 的 plugins 思想,实现更加灵活的自定义策略。

性能

正则的替换可能会导致 cpu 飙升等问题,替换的策略也有限制。

实现的底层不是基于正则的,性能要远高于正则,大概是 2 倍左右,符合企业级应用性能。

后续将添加对应的 benchmark。

小结

实际项目中,建议二者结合使用。

基于 log4j2 的方式统一处理非常方便,但是是性能和准确性要有一定的折中。

如果是新项目,建议使用注解的方式,通过日志标准规范开发,后续拓展性也更加灵活。



Tags:log4j2   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
基于 log4j2 插件实现统一日志脱敏,性能远超正则替换
前言金融用户敏感数据如何优雅地实现脱敏?日志脱敏之后,无法根据信息快速定位怎么办?经过了这两篇文章之后,我们对日志脱敏应该有了一定的理解。但是实际项目中,我们遇到的情况往...【详细内容】
2023-06-05  Search: log4j2  点击:(137)  评论:(0)  加入收藏
关于log4j2远程代码执行漏洞详细复现过程
log4j-2远程代码执行漏洞是因为log4j的版本中存在jndi(java Naming and Directory Interface)注入漏洞,jndi注入是利用的动态类加载机制完成攻击的,当程序将用户输入的数据进...【详细内容】
2022-09-04  Search: log4j2  点击:(594)  评论:(0)  加入收藏
排查 log4j2 安全漏洞的一次经历
简介2021年底,技术圈被 log4j2 漏洞掀起巨浪,各大安全公司纷纷发文介绍该漏洞的危害,并给出了各种临时解决方案。还有一些博主也发表文章教我们如何找到易受攻击的地方,并采取相...【详细内容】
2022-08-17  Search: log4j2  点击:(502)  评论:(0)  加入收藏
从源码看Log4j2、FastJson漏洞
远程代码漏洞对广大程序员来并不陌生,远程代码执行是指攻击者可能会通过远程调用的方式来攻击或控制计算机设备,无论该设备在哪里。如果远程代码执行的是一个死循环那服务器...【详细内容】
2021-12-31  Search: log4j2  点击:(375)  评论:(0)  加入收藏
SpringBoot整合log4j2进行日志配置及防坑指南
1、Log4j2优点具体优点可以参考官方文档:https://logging.apache.org/log4j/2.x/我这边只简单说一下:相比与其他的日志系统,log4j2丢数据的情况少;在多线程环境下,性能高于logbac...【详细内容】
2019-12-17  Search: log4j2  点击:(472)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条