首页 > 其他分享 >常用数据脱敏解决方案

常用数据脱敏解决方案

时间:2024-04-20 22:22:40浏览次数:16  
标签:常用 String mobile 解决方案 SQL desensitive 日志 脱敏

数据脱敏的应用场景主要有2类:

  1. 接口返回数据
  2. 日志打印数据

针对上述场景的需求,数据脱敏的实现方法可以有如下3种:

  1. 基于SQL进行脱敏,保证查询到的结果就是脱敏信息:SQL需要精心设计,依赖数据库函数,性能不高。
  2. 应用层脱敏:将查询到数据根据一定的策略进行脱敏后再返回或打印日志,对应用代码有入侵,性能可控。
  3. 基于日志框架进行脱敏:使用正则表达式进行处理,对日志格式有要求,否则无法识别需要脱敏的信息。

基于SQL语句脱敏

基于SQL语句的数据脱敏,需要依赖相应的数据库函数。
如下,以MySQL数据库为例,在查询数据的时候通过函数concat()left()right()实现脱敏处理。

-- 通过SQL语句对查询结果进行脱敏处理
select 
concat(left(mobile,3),'********') as mobile_desensitive,
concat(left(idcard,5),'*********',right(idcard,4)) as idcard_desensitive 
from `user` u; 

查询结果如下:

mobile_desensitive|idcard_desensitive|
------------------+------------------+
132********       |53211*********1111|
153********       |11011*********1111|

基于SQL语句的数据脱敏处理,SQL语句需要精心设计,并且需要依赖数据库函数,同时也可能存在性能瓶颈。
在数据规模可控时可以使用,否则建议使用其他方案。

应用层脱敏

数据脱敏的处理完全在应用层处理,也就说:什么数据该脱敏,如何脱敏,脱敏后如何使用完全在应用层控制。
在应用层进行数据脱敏可以应对日志打印,API接口数据返回等场景需求。
组件sensitive-plus提供了完整的解决方案。

字符串脱敏

// 调用工具方法对字符串进行脱敏
String mobile = "15678900987";
String sensitive = SensitiveInfoUtils.mobilePhone(mobile);
System.out.println(String.format("%s\n%s", source, sensitive));

输出:

15678900987
156****0987

对象属性脱敏

// 调用工具方法实现对象属性脱敏
String chineseName = "赵子龙";
String mobile = "13242429876";
String fixPhone = "010-32342214";
String address = "西川成都蜀国大将军府";
String idCard = "123456789012345678";
String bankCard = "6666666666666666666";
String email = "[email protected]";
String password = "1234567890";

SimpleEntity entity = SimpleEntity.builder()
        .chineseName(chineseName)
        .mobile(mobile)
        .fixPhone(fixPhone)
        .address(address)
        .idCard(idCard)
        .bankCard(bankCard)
        .email(email)
        .password(password)
        .build();
Object desensitive = SensitiveInfoUtils.desensitive(entity);
System.out.println(JSON.toJSONString(desensitive));

输出:

{
	"chineseName": "赵**",
	"mobile": "132****9876",
	"fixPhone": "********2214",
	"address": "西川成都******",
	"idCard": "**************5678",
	"bankCard": "666666*********6666",
	"email": "z*********@chengdu.com",
	"password": "******"
}

或者直接调用JSON脱敏序列化方法:

System.out.println(SensitiveJsonUtils.toJson(entity));

注:该方式需要在对象实体上应用脱敏注解。

public class SimpleEntity {
    /** 中文姓名 */
    @SensitiveLengthChineseName
    String chineseName;

    /** 手机号 */
    @SensitiveLengthMobile
    String mobile;

    /** 固定电话 */
    @SensitiveLengthFixedPhone
    String fixPhone;

    /** 地址 */
    @SensitiveLengthAddress
    String address;

    /** 身份证号 */
    @SensitiveLengthIdCard
    String idCard;

    /** 银行卡号 */
    @SensitiveLengthBankCard
    String bankCard;

    /** 邮箱 */
    @SensitiveLengthEmail
    String email;

    /** 密码 */
    @SensitiveLengthPassword
    String password;
}

基于日志框架脱敏

在Logback框架中,可以通过自定义MessageConverter的方式实现对日志消息脱敏处理。
具体实现可以参考sensitive-plus日志脱敏

这种基于日志框架的脱敏方式,有一些局限性:

  1. 只能应用在日志脱敏场景
  2. 基于正则式处理,对日志格式有要求
  3. 存在性能瓶颈

请谨慎使用!

写在最后

综上,不论是日志打印还是接口返回数据场景的脱敏需求,出于灵活性和性能考虑,都应该优先考虑在应用层处理。
至于在应用层处理的侵入性,可以通过项目约定进行统一即可。

【参考】
数据脱敏的 3 种常见方案,好用到爆!
logback-defender实现日志脱敏
使用Logback脱敏-扩展篇
基于logback的日志“规范”和“脱敏”

标签:常用,String,mobile,解决方案,SQL,desensitive,日志,脱敏
From: https://www.cnblogs.com/nuccch/p/18148298

相关文章

  • Appium自动化测试之常用的adb命令
    appium自动化用到的命令常用的一些adb命令1、adbdevices查看设备2、adbpull《手机路径》《电脑路径》从手机中拉取信息放到本地电脑例如:adbpull/sdcard/androidD:\appium,复制sdcard下的android文件夹到电脑D盘下的appium文件夹下3、adbpush《电脑路径》《手机路......
  • Python量化交易系统实战_Python常用库介绍
    作者:麦克煎蛋  出处:https://www.cnblogs.com/mazhiyong/转载请保留这段声明,谢谢! 在量化开发过程中,有一些强大的库是必须学会使用和熟悉的,这里简单整理下。一、Pandas1、简介Pandas是Python语言的一个扩展程序库,用于数据分析。Pandas名字衍生自术语"paneldata"(面板......
  • 掌握时间序列特征工程:常用特征总结与 Feature-engine 的应用
    时间序列数据的特征工程是一种技术,用于从时间序列数据中提取信息或构造特征,这些特征可用于提高机器学习模型的性能。以下是一些常见的时间序列特征工程技术:滚动统计量:计算时间窗口内的统计量,如平均值、中位数、标准偏差、最小值和最大值。这些统计量可以捕捉到时间序列在不同时......
  • Ubuntu 22.04 和 Windows 时间冲突解决方案
    默认情况下,Ubuntu(和大多数其他Linux发行版)假设硬件时钟设置为协调世界时间(UTC+0),而Windows则假设硬件时钟设置为当地时间,这导致Ubuntu快8小时。这种差异会导致你在双启动系统中切换操作系统时,经常遇到时间显示不正确的问题。要解决这个问题,有两种常用方法,要么让Linux......
  • WhaleScheduler为银行业全信创环境打造统一调度管理平台解决方案
    项目背景数字金融是数字经济的重要支撑和驱动力。近年来,我国针对数字金融的发展政策频频出台,《金融科技发展规划(2022-2025年)》、《“十四五”数字经济发展规划》、《关于银行业保险业数字化转型的指导意见》、《金融标准化“十四五”发展规划》等相继发布,顶层设计逐步完善。2......
  • Vue前端开发常用第三方资源库
    Vue前端第三方库集合......
  • 常用的 C# 第三方开发库
    常用的C#第三方开发库北京木奇软件外包开发商​已认证账号​关注 10人赞同了该文章C#的第三方开发库丰富多样,涵盖了各种领域,包括图形界面、数据处理、网络通讯、游戏开发等。以下是一些常用的C#第三方开发库,希望对大家有所帮助。 1.E......
  • linux运维常用命令总结
    1.tarzcf打包目录时,排除其中的一些目录或者文件tar--exclude=dir1--exclude=dir2--exclude=file1-czvfarchive.tar.gzsource_directory 2.yum只下载不安装包yum-yinstallnfs-utilsrpcbind--downloadonly--downloaddir/home/nfs 3.查看本机出网IP地址......
  • redis常见的应用问题以及解决方案
    缓存穿透问题描述:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源。用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。缓存穿透的条件:1.应用服务器压力变大2......
  • 基于信息安全的软测工具链解决方案
       伴随着汽车与外界的交互手段不断丰富,车联网相关设备、系统间的数据交互更加频繁,万物互联下的网络攻击也逐渐渗透延伸到车联网的领域。汽车行业面临着重大的信息安全挑战。此外,UNECEWP.29R155和ISO/SAE21434标准也对汽车的信息安全提出了规范化的要求,旨在产品全生命周......