0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

保护Log4j日志中的敏感数据,两步搞定!

jf_ro2CN3Fa 来源:芋道源码 2023-10-18 16:03 次阅读

介绍

我们可以通过实现自定义日志附加程序并使用正则表达式来识别和屏蔽敏感信息,从而屏蔽 Spring Boot 应用程序的 log4j 日志中的敏感数据。以下是具体方法实战:

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

第1步:创建自定义日志 Appender

创建一个扩展 log4j 提供的 AppenderSkeleton 的类。这个自定义appender将在日志消息写入日志之前拦截它们,并应用必要的屏蔽。

importorg.apache.log4j.AppenderSkeleton;
importorg.apache.log4j.spi.LoggingEvent;

publicclassMaskingAppenderextendsAppenderSkeleton{

@Override
protectedvoidappend(LoggingEventloggingEvent){
Stringmessage=loggingEvent.getMessage().toString();
StringmaskedMessage=maskSensitiveData(message);
loggingEvent.setMessage(maskedMessage);
super.append(loggingEvent);
}

@Override
publicvoidclose(){
//Cleanupresources,ifany
}

@Override
publicbooleanrequiresLayout(){
returnfalse;
}

privateStringmaskSensitiveData(Stringmessage){
//Implementyourlogictomasksensitivedatausingregularexpressions
//Fordemonstrationpurposes,let'sassumewewanttomaskcreditcardnumbers
returnmessage.replaceAll("\d{4}-\d{4}-\d{4}-\d{4}","****-****-****-****");
}
}

log4j中的一个appender负责将日志消息写入各种输出中。通过扩展AppenderSkeleton类,我们创建了一个自定义appender,它可以在将日志消息写入日志之前对其进行修改。

正则表达式(regex)是用于模式匹配和操作字符串的强大模式。在maskSensitiveData()方法中,我们使用regex来识别和替换敏感数据。在示例中,我们使用模式\d{4}-\d{4}-\d{4}-\d{4}匹配格式为“xxxx-xxxx”的信用卡号,并将其替换为“-”。

append()方法

log4j在准备添加日志消息时调用此方法。在MaskingAppender类中,我们覆盖这个方法来拦截日志消息,使用maskSensitiveData()方法对敏感数据应用masking,然后将修改后的消息传递给超类的append()方法。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

第2步:配置Log4j

在 Spring Boot 应用程序的配置文件中,我们需要配置 log4j 以使用自定义 Appender。我们还需要根据您的要求指定日志级别和其他设置。这是使用 application.properties 配置 log4j 的示例:

#Log4jconfiguration
log4j.rootLogger=INFO,maskedAppender

log4j.appender.maskedAppender=com.example.MaskingAppender
log4j.appender.maskedAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.maskedAppender.layout.ConversionPattern=%d[%t]%-5p%c-%m%n

第3步:包含 Log4j

确保在Spring Boot应用的构建文件中有必要的log4j依赖项(例如,Maven的pom.xml):




log4j
log4j
1.2.17


第4步::测试日志屏蔽

现在,当我们在 Spring Boot 应用程序中使用 log4j 记录消息时,敏感数据将被自动屏蔽。例如:

importorg.apache.log4j.Logger;

publicclassSomeService{
privatestaticfinalLoggerlogger=Logger.getLogger(SomeService.class);

publicvoidprocessSensitiveData(Stringdata){
logger.info("Processingsensitivedata:"+data);//Sensitivedatawillbemaskedinthelogs
}
}

在应用程序代码中,可以使用log4j提供的Logger来记录消息。在本例中,我们使用logger.info()记录一条消息。包含敏感数据的日志消息作为字符串连接传递。MaskingAppender拦截此消息并在将其写入日志之前应用掩码。

在上面的例子中,如果数据参数中包含类似“1234—5678—9012—3456”的信用卡号,那么它将在日志输出中被屏蔽为“正在处理敏感数据:——

结论

通过遵循这些步骤和概念,可以有效地屏蔽Spring Boot应用程序log4j日志中的敏感数据。请记住根据我们的特定需求和敏感数据模式调整maskSensitiveData()方法中的掩码逻辑。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20135
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56405
  • 掩码
    +关注

    关注

    0

    文章

    3

    浏览量

    1179

原文标题:保护 Log4j 日志中的敏感数据,两步搞定!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [分享]详细解读Hibernate包的作用

    使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带
    发表于 03-23 15:29

    logcat如何查看Andriod log系统日志

    logcat会输出系统哪些信息呢?如何学习logcat命令?logcat如何查看Andriod log系统日志?如何查看Andriod log系统日志
    发表于 03-03 06:15

    slf4j打印日志必须的三个依赖包相关资料推荐

    1、slf4j打印日志必须的三个依赖包  日志相关包 slf4j打印日志必须的三个依赖包  slf4j
    发表于 10-19 14:57

    STM32Cube工具的log4j漏洞CVE-2021-44228和CVE-2021-45046有何影响?

    STM32Cube工具的log4j漏洞CVE-2021-44228和CVE-2021-45046有何影响?
    发表于 12-07 07:02

    量子计算机可在分钟之间破解加密敏感数据

    iBM研究中心的负责人警告,量子计算机可分分钟破解如今最强大的安全技术保护的加密敏感数据
    发表于 05-21 02:00 979次阅读

    英特尔发布CPU微代码更新,防止攻击者窃取敏感数据

    保护的用户敏感数据的功率泄露攻击”(Power Leakage Attacks:Targeting Your Protected User Secrets)。
    的头像 发表于 11-11 16:18 2245次阅读

    使用IBM Cloud超级保护加密服务保护敏感数据

    利用量子安全加密技术,为应对未来的威胁做好准备:尽管量子计算的目标是解决即便是世界上最强大的超级计算机也无法解决的复杂问题,但未来的容错量子计算机可能也会带来潜在风险,例如能够快速破解加密算法并访问敏感数据
    的头像 发表于 01-06 16:54 1555次阅读

    Java日志框架中的王者是谁

    ,远不及Apache 的新一代日志框架 - Log4j 目前来看,Log4j2 就是王者,其他日志框架都不是对手 Log4j2简介 Apac
    的头像 发表于 10-13 09:12 1194次阅读

    使用Keysight免费评估Log4j/Log4Shell零日漏洞

    在过去72小时左右的时间里,网络安全领域的大多数人已经意识到Log4j/Log4Shell零日漏洞及其对大多数web服务器、云应用程序、互联网设备和嵌入式设备的广泛影响。你可以阅读CVE-2021-44228中记录的所有血淋淋的细节,但底线是:这可能非常非常糟糕。
    的头像 发表于 12-21 10:50 1268次阅读

    log4j日志框架分析

    og4j是Apache下的一款开源的日志框架,能够满足我们在项目中对于日志记录的需求。log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。使用者可以自己定义Appen
    的头像 发表于 02-28 14:32 688次阅读
    <b class='flag-5'>log4j</b><b class='flag-5'>日志</b>框架分析

    针对大量log日志快速定位错误地方

    用 grep 拿到的日志很少,我们需要查看附近的日志。我是这样做的,首先: cat -n test.log | grep “关键词” 得到关键日志的行号
    的头像 发表于 04-21 09:22 473次阅读

    Spring Boot的日志框架使用

    目前市面上常见的日志框架有:slf4j(Simple Logging Facade for Java)、logback、log4jlog4j2、commons-logging(Spring默认
    的头像 发表于 06-02 10:59 691次阅读
    Spring Boot的<b class='flag-5'>日志</b>框架使用

    服务器log日志大,掌握这些可正确快速定位错误!

    针对大量log日志快速定位错误地方
    的头像 发表于 06-05 18:14 437次阅读

    基于Rust的Log日志库介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序中,日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log库提供
    的头像 发表于 09-19 14:49 2150次阅读

    Log4cpp优势及优点

    命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等; 可以动态控制日志记录级别,在效率和功能中进行调整; 所有配置可以通过配置文件进行动态调整; 多语言支持,包括Java(log4j
    的头像 发表于 11-09 14:27 274次阅读
    <b class='flag-5'>Log</b>4cpp优势及优点