项目介绍

日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。

sensitive提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。

同时支持 logback 和 log4j2 等常见的日志脱敏插件。

拓展阅读

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

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

log4j2 插件统一脱敏

说明

上面的方法非常适用于新的项目,按照响应的规范进行推广。

但是很多金融公司都有很多历史遗留项目,或者使用不规范,比如使用 map 等,导致上面的方法在脱敏技改时需要耗费大量的时间,而且回溯成本很高。

有没有什么方法,可以直接在日志层统一处理呢?

log4j2 Rewrite

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

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

使用入门

maven 引入

引入核心脱敏包。

<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-log4j2</artifactId>
<version>1.6.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.layout"> <Properties>
<Property name="DEFAULT_PATTERN">%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Property>
<Property name="DEFAULT_CHARSET">UTF-8</Property>
</Properties> <Appenders>
<Console name="Console" target="SYSTEM_OUT">
<SensitivePatternLayout/>
</Console>
</Appenders> <Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers> </Configuration>

几个步骤:

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

  2. 按照 log4j2 layout 规范,指定 Layout 策略为 SensitivePatternLayout

测试

正常的日志打印:

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);

自动脱敏效果如下:

01:37:28.010 [main] INFO  com.github.houbb.sensitive.test.log4j2.Log4j2AndSlf4jLayoutTest - mobile:130****7777|9FC4D36D63D2B6DC5AE1297544FBC5A2; bankCard:6217***********5024|444F49289B30944AB8C6C856AEA21180, email:mahu*****@qq.com|897915594C94D981BA86C9E83ADD449C, amount:123.00, IdNo:340110199801016666, name1:李明, name2:李晓明, name3:李泽明天, name4:山东小栗旬, birthday:20220517, GPS:120.882222, IPV4:127.0.0.1, address:中国上海市徐******|821A601949B1BD18DCBAAE27F2E27147;

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

log4j2 配置定制化

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

用户可以在应用 resources 下通过 chars-scan-config.properties 配置文件指定。

默认配置

log4j2 配置中,SensitivePatternLayout 配置默认为:

chars.scan.prefix=::,,'"‘“=| +()()
chars.scan.scanList=1,2,3,4,9
chars.scan.replaceList=1,2,3,4,9
chars.scan.defaultReplace=12
chars.scan.replaceHash=md5
chars.scan.whiteList=""

属性说明

SensitivePatternLayout 策略的属性说明。

属性 说明 默认值 备注
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种敏感信息替换策略,指定一个。当列表没有匹配时,默认使用这个
whiteList 白名单 `` 希望跳过处理的白名单信息

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

策略标识 说明
1 手机号
2 身份证
3 银行卡
4 邮箱
5 中国人名
6 出生日期
7 GPS
8 IPV4
9 地址
10 护照
11 匹配任意不掩盖
12 匹配任意半掩盖
13 匹配任意全掩盖

不足之处

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

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

logback 脱敏插件

说明

为了便于用户使用,v1.6.0 开始支持 logback 插件模式。

使用入门

maven 引入

引入 logback 依赖包

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>

指定 logback.xml 配置

<configuration>
<!-- 基于 converter -->
<conversionRule conversionWord="sensitive" converterClass="com.github.houbb.sensitive.logback.converter.SensitiveLogbackConverter" />
<!-- 使用 converter -->
<appender name="STDOUTConverter" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %sensitive%n</pattern>
</encoder>
</appender> <!-- 使用 layout -->
<appender name="STDOUTLayout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="com.github.houbb.sensitive.logback.layout.SensitiveLogbackLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
</appender> <!-- 设置根日志级别为DEBUG,并将日志输出到控制台 -->
<root level="DEBUG">
<appender-ref ref="STDOUTConverter"/>
<appender-ref ref="STDOUTLayout"/>
</root>
</configuration>

这里共计支持 Converter 和 Layout 两种模式,任选一个即可。

建议使用 SensitiveLogbackConverter,脱敏日志内容。

日志效果

脱密效果和 log4j2 类似,如下:

01:42:32.579 [main] INFO  c.g.h.sensitive.test2.LogbackMain - mobile:130****7777|9FC4D36D63D2B6DC5AE1297544FBC5A2; bankCard:6217***********5024|444F49289B30944AB8C6C856AEA21180, email:mahu*****@qq.com|897915594C94D981BA86C9E83ADD449C, amount:123.00, " + "IdNo:340110199801016666, name1:李明, name2:李晓明, name3:李泽明天, name4:山东小栗旬" + ", birthday:20220517, GPS:120.882222, IPV4:127.0.0.1, address:中国上海市徐******|821A601949B1BD18DCBAAE27F2E27147;

配置属性

同 log4j2,此处不再赘述。

小结

基于日志插件的方式更加方便,便于项目的推广使用,实用性更强。

项目的开源地址

https://github.com/houbb/sensitive

高性能日志脱敏组件:已支持 log4j2 和 logback 插件的更多相关文章

  1. 一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系

    公众号Mac代码分割阅读链接 前言 之前都是使用SparkStreaming开发,最近打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上.因为Flin ...

  2. 微信自用高性能通用key-value组件MMKV已开源!

    1.MMKV简介 腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性.近 ...

  3. java 日志脱敏框架 sensitive-v0.0.4 系统内置常见注解,支持自定义注解

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 特性 基于注解的日志脱敏. 可 ...

  4. Java日志脱敏框架 sensitive-v0.0.4 系统内置常见注解,支持自定义注解

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 特性 基于注解的日志脱敏. 可 ...

  5. java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的支持

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 用户也可以基于自己的实际需要, ...

  6. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  7. 高性能 Windows Socket 组件 HP-Socket v2.2.3 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  8. 通用高性能 Windows Socket 组件 HP-Socket v2.2.2 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  9. 通用高性能 Windows Socket 组件 HP-Socket v2.2.2 更新发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  10. java 日志脱敏框架 sensitive,优雅的打印脱敏日志

    问题 为了保证用户的信息安全,敏感信息需要脱敏. 项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅. 于是,就写了一个基于 java 注解 ...

随机推荐

  1. 【干货向】我想试试教会你如何修改Git提交信息

    Git是目前IT行业使用率最高的版本控制系统,相信大家在日常工作中也经常使用,每次Git提交都会包含提交信息,常用的包括说明.提交人和提交时间等,此篇文章主要向大家介绍下如何修改这些信息,这些命令在正 ...

  2. Visual Studio Code调试和发布ASP.NET Core Web应用

    前言 上一篇文章主要讲了Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用有兴趣的同学可以去看看,今天咱们主要是要讲讲如何在VS Code中调试和发布AS ...

  3. 基于java+springboot的视频点播网站-在线视频点播系统

    该系统是基于java+springboot开发的视频点播系统.是给师妹开发的毕业设计. 演示地址 前台地址: http://video.gitapp.cn 后台地址: http://video.git ...

  4. .Net8的AOT引导程序BootStrap

    前言 .Net8的本地预编机器码AOT,它几乎进行了100%的自举.微软为了摆脱C++的钳制,做了很多努力.也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等.而需要C++做的,也就仅仅是引 ...

  5. C语言指针--一级指针

    文章目录 前言 一.什么是指针 二.一级指针的使用 1.一级指针的创建 2.指针的赋值 3.&是什么 4.一维指针的使用 4.1 `变量` 和 `*变量` 4.2 输出指针变量内容 4.3 改 ...

  6. Cilium系列-5-Cilium替换KubeProxy

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  7. Angular: 点击一次按钮,增加一个元素

    解决方案 思路 在组件的typesscript文件中,创建一个数组来存储每个按钮的信息 在模板中使用 *ngFor 指令来循环渲染按钮列表 在按钮事件的处理函数中,每次点击按钮时向按钮数组添加一个新的 ...

  8. Oracle 11g手工建库

    搭建环境 1.建立相应的目录 mkdir /u01/app/oracle/oradata/test1 mkdir /u01/app/oracle/fast_recovery_area/test1 mk ...

  9. 如何用 ModelScope 实现 “AI 换脸” 视频

    前言 当下,视频内容火爆,带有争议性或反差大的换脸视频总能吸引人视线.虽然 AI 换脸在市面上已经流行了许久,相关制作工具或移动应用也是数不胜数.但是多数制作工具多数情况下不是会员就是收费,而且替换模 ...

  10. react中常见hook的使用方式与区别

    1.什么是hook?react hook是react 16.8推出的方法,能够让函数式组件像类式组件一样拥有state.ref.生命周期等属性. 2.为什么要出现hook?函数式组件是全局当中一个普通 ...