什么是数据脱敏?
来源于百度介绍:数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。数据安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。数据库安全风险包括:拖库、刷库、撞库。
什么情况下使用?
日常生活中,我们在各个APP上、火车票上都会对我们的敏感信息进行脱敏隐藏话,这些都是在政府系统、金融、支付等系统中使用。
引用自美团技术团队 这里我们把敏感数据分成四个维度进行梳理,用户、商家、终端、公司。
从用户维度进行梳理可能有这些敏感字段如下:手机号码、邮件地址、账号、地址、固定电话号码等信息(此外个人隐私数据相关还有如:种族、政治观点、宗教信仰、基因等)
从商家维度进行梳理:合同签订人,合同签订人电话等(不排除全局敏感数据:如商家团购品类等)
从用户终端维度进行梳理:能够可能标识终端的唯一性字段,如设备id。
从公司角度进行梳理:交易金额、代金卷密码、充值码等
对于开发的伙伴来说,我们经常需要从生产库那边导入一部分数据到本地的开发和测试数据库,但是本地数据库就需要对数据进行脱敏。通常我们可以写SQL脚本对敏感字段进行处理,处理的方式必须保持原有的信息的特征,对敏感信息的脱敏。
脱敏的处理方法:
替换:如统一将女性用户名替换为F,这种方法更像“障眼法”,对内部人员可以完全保持信息完整性,但易破解。 重排:序号12345重排为54321,按照一定的顺序进行打乱,很像“替换”, 可以在需要时方便还原信息,但同样易破解。 加密:编号12345加密为23456,安全程度取决于采用哪种加密算法,一般根据实际情况而定。 截断:13811001111截断为138,舍弃必要信息来保证数据的模糊性,是比较常用的脱敏方法,但往往对生产不够友好。 截断+加密:2558664@163.com ->au23342sdsu1231@163.com,我们保留邮箱域名,对账号进行加密处理 掩码: 123456 -> 1xxxx6,保留了部分信息,并且保证了信息的长度不变性,对信息持有者更易辨别, 如火车票上得身份信息。 日期偏移取整:20130520 12:30:45 -> 20130520 12:00:00,舍弃精度来保证原始数据的安全性,一般此种方法可以保护数据的时间分布密度。 自定义编码:上海市上海市长宁区虹桥路528号->上海市*******528号,根据自己定义的规则进行脱敏处理
如何在开发中进行脱敏?
在真实的业务场景中,我们可能会遇到需要到数据库中脱敏、另外一种是在前端显示脱敏。这个过程都需要后端来做一下处理。我们该如何保证数据脱敏呢? 第一种:从后端到前端脱敏处理。比较简单的处理了防窥的作用 可以看到我们对返回的对象进行处理,给返回对象进行脱敏处理。这个再数据库层面还是明码存储的,这样就会造成,如果数据库被访问到,数据的安全性就会有所欠缺。
第二种:数据库层面进行脱敏处理。 1)从前端传回来的数据是明文存储或者加密处理都可以,在后端存入数据库之前,我们对需要脱敏的字段进行脱敏处理。使得保存在数据库的是安全的,展示的时候也不会出错。既可以明文展示也可以脱敏展示。 根据这样的业务需求,我们就可以通过使用字段注解的方式,在对象序列化前后进行脱敏与还原的处理。具体实现代码,参考下一篇。
2)从生产库到开发库的数据,到开发库之后要进行脱敏处理。 这种情况下,只能通过写脚本的方式更改数据库内容了,网上有几款工具,他们同样也是用的脚本方式实现的,从嘴底层的原理就是写sql实现update的脚本。
update overhaul_defect_order set
update_time = update_time,
designate_user_phone = CONCAT(LEFT(designate_user_phone,3),'****',RIGHT(designate_user_phone,4)),
overhaul_phone = CONCAT(LEFT(overhaul_phone,3),'****',RIGHT(overhaul_phone,4)),
vendor_name = (SELECT outside_vendor.`name` from `outside_vendor` where overhaul_defect_order.vendor_id = `outside_vendor`.id),
contact_phone = CONCAT(LEFT(contact_phone,3),'****',RIGHT(contact_phone,4)) ;
|