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

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

公众号新闻

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入芋道快速开发平台知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn

来源:medium.com


介绍

我们可以通过实现自定义日志附加程序并使用正则表达式来识别和屏蔽敏感信息,从而屏蔽 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将在日志消息写入日志之前拦截它们,并应用必要的屏蔽。

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;

public class MaskingAppender extends AppenderSkeleton {

    @Override
    protected void append(LoggingEvent loggingEvent) {
        String message = loggingEvent.getMessage().toString();
        String maskedMessage = maskSensitiveData(message);
        loggingEvent.setMessage(maskedMessage);
        super.append(loggingEvent);
    }

    @Override
    public void close() {
        // Cleanup resources, if any
    }

    @Override
    public boolean requiresLayout() {
        return false;
    }

    private String maskSensitiveData(String message) {
        // Implement your logic to mask sensitive data using regular expressions
        // For demonstration purposes, let's assume we want to mask credit card numbers
        return message.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 的示例:

# Log4j configuration
        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 dependencies -->
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>

第4步::测试日志屏蔽

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

import org.apache.log4j.Logger;

public class SomeService {
    private static final Logger logger = Logger.getLogger(SomeService.class);

    public void processSensitiveData(String data) {
        logger.info("Processing sensitive data: " + data); // Sensitive data will be masked in the logs
    }
}

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

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

结论

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


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Guava 骚操作,10分钟搞定日志脱敏需求!AI 大模型热潮来袭,看机密计算如何应对敏感数据安全挑战财报解读丨奈飞:陷入“进一步、退两步”模式每月乐高新刊:2023年8月,鬼怪加满都在杂志中登场!黑科技!TAYLORMADE MG4 挖起杆旋风登场!忽视日志可要吃大亏,手把手教你玩转 SpringBoot 日志明星潮人都在穿的跑鞋!踩一下会回弹,跑两步会爱上~接受现实,两周冲刺拿下Kellogg/UCLA/NYU | 申请经验世界十大购物街之一的结构的浪漫体验【美本访校日志】城市中的文理学院Macalester College: 博雅和职场教育的碰撞日志|龙年限定!这届管理日志主打一个龙腾四季、好事连连【双养日课】敏感期分阶段吗?错过了敏感期,我该怎么办?陈奕*都在穿的冠军跑鞋!踩一下会回弹,跑两步会爱上~浅析JAVA日志中的几则性能实践与原理解释他们和外星人有关系吗?Nat Commun | 四川大学赵瀛兰团队揭示抑制LSD1增强PARP抑制剂在卵巢癌中的敏感性长篇小说《如絮》第一百八十二章 朝鲜-1951-1955年 3 向死而生【荐】《中国国家地理》旗下《博物》杂志中科院专家护航 有趣 靠谱!【美本访校日志】三星小公主就读的 Colorado College,为何让学生访校后又爱又恨?忽视日志吃大亏,手把手教你玩转 SpringBoot 日志!忽视日志吃大亏,手把手教你玩转 SpringBoot 日志产品经理如何安全度过试用期?这两步是关键!ROG PG49WCD 显示器即将上市:49 英寸双 2K 144Hz OLED 屏Android logo又换新,历年logo你最喜欢哪个?王逢陈、Pronounce 、尤目、Songmont 等42条中国设计师品牌最新动态【华丽志中国设计师品牌月度观察】第十期陈奕*都在穿的跑鞋!踩一下会回弹,跑两步会爱上~Moncler、利郎、Burton等品牌纷纷联手中国独立设计师!【华丽志中国设计师品牌月度观察】第十一期小物小欢喜【滋味】越简单越满足,四步搞定开洋葱油拌面!TAYLORMADE MG4 挖起杆旋风登场!激光蚀刻坑道创造更多旋转!全文|《浙江省汽车数据处理管理规定》:敏感数据单独同意、车外提供车内匿名、座舱数据默认关闭[电脑] 当 ROG 遇上 XPG——ROG Z790 HERO+XPG ROG 认证内存+太阳神装机展示个人养老“一岁啦”,五大亮点,四步搞定,快来看看!她们这样生活Linux 日志分析工具(logwatch)安装及使用
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。