当前位置:网站首页>日志脱敏-参考
日志脱敏-参考
2022-07-17 09:04:00 【Fire king】
点击关注公众号,实用技术文章及时了解
前言
在我们书写代码的时候,会书写许多日志代码,但是有些敏感数据是需要进行安全脱敏处理的。
对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。
两种方式各有优缺点:
第一种方式需要修改代码,不符合开闭原则。
第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。
自定义脱敏组件(slf4j+logback)
一个项目在书写了很多打印日志的代码,但是后面有了脱敏需求,如果我们去手动改动代码,会花费大量时间。如果引入本组件,完成配置即可轻松完成脱敏。(仅需三步可轻松配置)
一、自定义脱敏组件 - 脱敏效果演示


二、自定义脱敏组件 - 使用方式
1、引入Jar包依赖
前提是你将Jar包打入本地仓库,Jar包地址见后文。
-
<dependency>
-
<groupId>pers.liuchengyin</groupId>
-
<artifactId>logback-desensitization</artifactId>
-
<version>
1.0
.0</version>
-
</dependency>
2、替换日志文件配置类(logback.xml)
日志打印方式都只需要替换成脱敏的类即可,如果你的业务不需要,则无需替换。
①ConsoleAppender - 控制台脱敏
-
// 原类
-
ch.qos.logback.core.ConsoleAppender
-
// 替换类
-
pers.liuchengyin.logbackadvice.LcyConsoleAppender
②RollingFileAppender - 滚动文件
-
// 原类
-
ch.qos.logback.core.rolling.RollingFileAppender
-
// 替换类
-
pers.liuchengyin.logbackadvice.LcyRollingFileAppender
③FileAppender - 文件
-
// 原类
-
ch.qos.logback.core.FileAppender
-
// 替换类
-
pers.liuchengyin.logbackadvice.LcyFileAppender
替换示例:
-
<property name=
"CONSOLE_LOG_PATTERN"
-
value=
"%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
-
-
<!-- ConsoleAppender 控制台输出日志 -->
-
<appender name=
"CONSOLE" class=
"pers.liuchengyin.logbackadvice.LcyConsoleAppender">
-
<encoder>
-
<pattern>
-
${CONSOLE_LOG_PATTERN}
-
</pattern>
-
</encoder>
-
</appender>
3、添加脱敏配置文件(logback-desensitize.yml)
该配置文件应该放在resources文件下

三、自定义脱敏组件 - 脱敏规范
1、支持数据类型
八大基本类型及其包装类型、Map、List、业务里的Pojo对象、List<业务里的Pojo对象>、JSON字符串。
注:在配置文件中配置的时候,只需要配置对象里的属性值就行。
2、不支持的数据类型
List<八大基本类型及包装类型>,因为不知道脱敏的数据源具体是哪一个。
3、匹配规则
key + 分割符 + value,目前仅支持冒号(:)和等号(=),示例如下:
-
-
key:定义了对应需要脱敏的关键字,如上诉的email、phone等以及业务对象中的字段、Map中的Key、JSON中的Keyvalue:需要脱敏的值,如上诉的[email protected]、15310763497。
4、日志规范
建议书写日志的时候尽量规范,对于key为中文的是没有办法脱敏的,规范程度可以见脱敏效果演示里的代码。
四、logback-desensitize.yml配置说明
-
# 日志脱敏
-
log-desensitize:
-
# 是否忽略大小写匹配,默认为
true
-
ignore:
true
-
# 是否开启脱敏,默认为
false
-
open:
true
-
# pattern下的key/value为固定脱敏规则
-
pattern:
-
# 邮箱 - @前第
4
-7位脱敏
-
email:
"@>(4,7)"
-
# qq邮箱 - @后
1
-3位脱敏
-
qqemail:
"@<(1,3)"
-
# 姓名 - 姓脱敏,如*杰伦
-
name:
1,
1
-
# 密码 - 所有需要完全脱敏的都可以使用内置的password
-
password: password
-
patterns:
-
# 身份证号,key后面的字段都可以匹配以下规则(用逗号分隔)
-
- key: identity,idcard
-
# 定义规则的标识
-
custom:
-
# defaultRegex表示使用组件内置的规则:identity表示身份证号 - 内置的
18/
15位
-
- defaultRegex: identity
-
position:
9,
13
-
# 内置的other表示如果其他规则都无法匹配到,则按该规则处理
-
- defaultRegex: other
-
position:
9,
10
-
# 电话号码,key后面的字段都可以匹配以下规则(用逗号分隔)
-
- key: phone,cellphone,mobile
-
custom:
-
# 手机号 - 内置的
11位手机匹配规则
-
- defaultRegex: phone
-
position:
4,
7
-
# 自定义正则匹配表达式:座机号(带区号,号码七位|八位)
-
- customRegex:
"^0[0-9]{2,3}-[0-9]{7,8}"
-
# -后面的
1
-4位脱敏
-
position:
"-<(1,4)"
-
# 自定义正则匹配表达式:座机号(不带区号)
-
- customRegex:
"^[0-9]{7,8}"
-
position:
3,
5
-
# 内置的other表示如果其他规则都无法匹配到,则按该规则处理
-
- defaultRegex: other
-
position:
1,
3
-
# 这种方式不太推荐 - 一旦匹配不上,就不会脱敏
-
- key: localMobile
-
custom:
-
customRegex:
"^0[0-9]{2,3}-[0-9]{7,8}"
-
position:
1,
3
上面这个配置是相对完整的,一定要严格遵守层级配置格式。
自定义脱敏支持的方式
1、key:value的方式
phone:4,7,表示phone属性的4-7位进行脱敏
原始数据:
13610357861脱敏后:
136****7861
2、以符号作为起始、结束节点作为脱敏标志
emai:"@>(4,7)",@为脱敏标志,>表示其为结束节点,<表示其为开始节点。即@>表示对@之前的进行脱敏,@<表示对@之后的进行脱敏。这个示例就是@前的数据的第4-7位进行脱敏。推荐:Java面试题宝典
注意:这种规则里的双引号、括号不能省略,其次
:和=不能作为标志符号,因为和匹配规则有冲突
原始数据:
[email protected]"@>(4,7)"脱敏后:123****[email protected]"@<(1,3)"脱敏后:[email protected]***com
3、自定义正则脱敏
-
patterns:
-
# 手机号
-
- key: phone,mobile
-
custom:
-
# 手机号的正则
-
- customRegex:
"^1[0-9]{10}"
-
# 脱敏范围
-
position:
4,
7
customRegex:正则表达式,如果符合该表达式,则使用其对应的脱敏规则(position)
4、一个字段,根据多种值含义进行自定义脱敏
比如说,username字段的值可以是手机号、也可以是邮箱,这个值动态改变的,前面几种方式都没办法解决,可以使用该方式。
-
patterns:
-
- key: username
-
custom:
-
# 手机号 -
11位
-
- defaultRegex: phone
-
position :
4,
7
-
# 邮箱 - @
-
- defaultRegex: email
-
position :
"@>(3,12)"
-
# 身份证 -
15/
18位
-
- defaultRegex: identity
-
position :
1,
3
-
# 自定义正则
-
- customRegex:
"^1[0-9]{10}"
-
position :
1,
3
-
# 都匹配不到时,按照这种规则来
-
- defaultRegex: other
-
position :
1,
3
注意:上面示例中匹配规则里的 双引号和括号 都不能省略
该组件内置四种匹配规则:手机号、身份证号、邮箱、other(其他匹配不到时用的),内置一种脱敏方式:password,表示完全脱敏,可用于pattren下的。
注:当pattern和patterns下的key有重复的时候,只会使用pattern下指定的方式进行脱敏。
Jar包地址和源码地址
https://github.com/liuchengyin01/LogbackDesensitization/tree/master/repo/pers/liuchengyin/logback-desensitization/1.0.0

Github地址:
https://github.com/liuchengyin01/LogbackDesensitization
Jar包打入Maven本地仓库的方式
1、下载Jar包,放在一个文件夹里
2、在这个文件夹里打开cmd(打开cmd,进入到这个文件夹)
3、执行命令(前提保证maven配置正常,使用mvn -v命令查看是否正常,如果显示版本号表示正常)
mvn install:install-file -DgroupId=pers.liuchengyin -DartifactId=logback-desensitization -Dversion=1.0.0 -Dpackaging=jar -Dfile=logback-desensitization-1.0.0.jar
命令说明:
-
-DgroupId
-
表示jar对应的groupId
-
<groupId>pers.liuchengyin</groupId>
-
-DartifactId:
-
表示jar对应的artifactId
-
<artifactId>logback-desensitization</artifactId>
-
-Dversion
-
表示jar对应的 version
-
<version>
1.0
.0</version>
边栏推荐
- Binary installation MySQL initialization password problem
- 2022t elevator repair examination question bank and answers
- 2022T电梯修理考试题库及答案
- [Hongke] Introduction to genicam protocol
- 也挺难的,不光我自己写的很累
- Event loop, macro task, micro task
- 什么是内存溢出
- Magic Usage of mongodb $symbol +mongo data type
- 【CTF】pwn2_sctf_2016
- [handwritten numeral recognition] handwritten numeral recognition based on lenet network with matlab code
猜你喜欢

Scope and lifecycle of beans

Magic Usage of mongodb $symbol +mongo data type

Distributed transaction reliable message final consistency solution

一文,教你实现单点登录

Google Play应用商店可能会删除应用权限概述 转而使用新的数据安全信息组合

Event loop, macro task, micro task
![[Hongke] Introduction to genicam protocol](/img/a5/91a1d24a47ea2e3265530778d6fc1f.png)
[Hongke] Introduction to genicam protocol

2022 Guangdong Provincial Safety Officer a certificate, the third batch (main person in charge) exercise questions and mock examination

第六天训练

Nacos new configuration management
随机推荐
mysql 初始化修改密码问题
2022T电梯修理考试题库及答案
RPA相关知识点整理
Simple case of wechat applet calling API
小说里的编程 【连载之十四】元宇宙里月亮弯弯
Programming in the novel [serial 15] the moon bends in the yuan universe
Cbcgpedit control used by BCG
LeetCode 0116.填充每个节点的下一个右侧节点指针
封装API,request拦截,response拦截,身份验证时效性
解决接口跨域问题和node操作MySQL
使用<pre>和JSON.stringify处理网页展示JSON的格式
【CTF】pwn2_sctf_2016
软件测试需要学习多久?
Expanding hard disk in VMWare
[leetcode] general operation summary
树状数组
Bean的作用域和生命周期
SDL图像显示
LeetCode 0116. Populate the next right node pointer for each node
Linear regression + basic optimization of deep learning