什么是数据脱敏?
很多人做过开拓,但不一定知道这个词汇数据脱敏
那么数据脱敏实在便是把主要的一些数据信息进行隐蔽,
在我们开拓指定的脱敏规则之下对敏感数据进行处理、编辑、修正的一种办法,防止这些主要数据直接暴露在不屈安的环境下, 这就叫数据脱敏

总的来说数据脱敏的意思便是让敏感的数据通过一种洗手不干的手腕把它隐蔽起来,大略的说便是把敏感数据保护起来!
开拓中哪些数据和运用处景须要做数据脱敏我们平常开拓中实在有很多大略的业务也会涉及到数据脱敏这些信息便是比较敏感的信息,一定须要处理才行!
我们来看看以下的这些运用处景!
例如:用户个人信息 我们在处理用户个人信息时,例如姓名、地址、电话号码等,为了保护用户的隐私,须要对这些数据进行脱敏处理,如将电话号码更换为部分号码 或者把手机号码的中间主要的四位数字进行隐蔽。
一些金融信息 例如银行账号、信用卡号等,为了防止数据透露和敲诈行为,须要对这些数据进行脱敏处理,如将账号部分数字更换为对吧!
其余便是一些医疗信息,例如病历、诊断结果、药品处方等,为了保护患者的隐私和安全,须要对这些数据进行脱敏处理,比如:患者姓名、诊断结果等敏感信息进行脱敏。
企业敏感数据也可能存在一些敏感数据,比如: 公司财务报告、产品营销策略文档等,为了防止数据透露给未授权职员,须要对这些数据进行脱敏处理。
还有数据传输也存在这个情形, 例如在数据库或日志文件中存储用户密码、在互联网传输敏感信息时,为了保护数据的安全性,须要对这些数据进行脱敏处理,如将密码哈希存储、对传输的数据进行加密等。
举个大略的栗子
大家都知道自己账户的银行卡吧, 加入你要查看银行卡的时候,只会显示银行卡的末了4位
如图
这便是数据脱敏后的效果
如果你要查看银行卡的全部卡号,那么你就要通过本人来进行人脸识别,手机短信验证,通过往后才能显示全部银行卡来进行查看!
数据脱敏的大略过程大略的说也便是把数据中敏感的部分变成密文的手腕!
大略的数据脱敏流程大致如下:
首先你要确定哪些数据属于敏感数据, 然后根据实际情形选择得当的脱敏办法,比如: 加密、更换、删除等都可以,用这些办法来对对敏感数据进行脱敏处理 从而确保数据的安全性和可用性
如图
然后再根据脱敏数据的规范制订一系列访问权限的逻辑规则
举个栗子
比如用户身份验证或者登录之后,确定用户在某个权限的情形下,对付敏感数据那么就按照用户权限来进行划分访问和查看!
如图
PHP实现数据脱敏的大略方法
假设有一个用户表,个中包含用户的姓名、电话号码和电子邮件地址
数据如下
// 用户表数据$users = [ ['name' => '张三', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'], ['name' => '李四', 'phone' => '13987654321', 'email' => 'lisi@example.com'],];
为了保护用户的隐私,须要对电话号码和电子邮件地址进行脱敏处理!
那么我们可以针对这个业务逻辑封装一个大略函数
代码如下
/ @param $data @return mixed /function desensitizeData($data){ $sensitiveData = ['phone', 'email']; foreach ($sensitiveData as $key) { if (isset($data[$key])) { $data[$key] = str_repeat('', strlen($data[$key])); } } return $data;}// 对用户表进行循环脱敏处理foreach ($users as &$user) { $user = desensitizeData($user);}unset($user);// 输出脱敏后的用户表数据print_r($users);
在这个案例当中我们定义了一个desensitizeData函数,它接管一个数组作为参数来检讨数组中是否存在须要脱敏的敏感数据字段,并将其更换为相同长度的字符!
然后,我们遍历用户表中的每个用户,对个中的敏感数据进行脱敏处理,末了输出脱敏后的用户表数据。
这样,用户的电话号码和电子邮件地址就被成功地脱敏隐蔽了。
结果如下
当然你也可以根据详细需求来修正代码逻辑从而脱敏数据
比如:我们现在须要把保留手机号码的前三位和后四位,那么我们的代码实在只须要加一个大略的函数就可以了
代码如下
/ @param $phone @return string /function desensitizePhone($phone) { return substr($phone, 0, 3) . '' . substr($phone, 7);}/ @param $data @return mixed /function desensitizeData($data){ $sensitiveData = ['phone', 'email']; foreach ($sensitiveData as $key) { if (isset($data[$key]) && $key=='phone') { $data[$key]=desensitizePhone($data[$key]); }else{ $data[$key] = str_repeat('', strlen($data[$key])); } } return $data;}// 对用户表进行循环脱敏处理foreach ($users as &$user) { $user = desensitizeData($user);}unset($user);// 输出脱敏后的用户表数据print_r($users);
效果如下
为了更好的实现数据脱敏的需求,我们可以优化一下我们的封装函数
让这个函数可以兼容 手机号、银行卡、身份证、中笔墨符串的脱敏操作,并且可以自由指定脱敏字符!
代码如下
/ 描述: 手机号,银行卡号,身份证等 中笔墨符串脱敏处理函数 @param $string 须要脱敏值 @param int $start 开始 @param int $length 结束 隐蔽敏感数据的个数 @param string $re 脱敏替代符号 @return bool|string 示例: _DataDesensitization('数据字符串', 开始位置, 脱敏个数); /function _DataDesensitization($string, $start = 0, $length = 0, $mark = ''){ //如果通报的字符串数据为空 if (empty($string)) { return false; } //定义个空数组 $container = array(); //获取字符串的长度 $mb_strlen = mb_strlen($string); //循环, 把通报进来的字符串变为数组 while ($mb_strlen) { $container[] = mb_substr($string, 0, 1, 'utf8'); //每次循环把字符串最前面的第一个放入数组 $string = mb_substr($string, 1, $mb_strlen, 'utf8'); //每次循环重新赋值字符串本身 $mb_strlen = mb_strlen($string); //每一次循环 重新打算字符串的长度,用于循环条件的递减 } //统计一下,转载数组中的元素个数 $strlen = count($container); //求开始下标 例如: 6 - 3 = 3 求出从数组的哪一位开始进行处理 $begin = $start >= 0 ? $start : ($strlen - abs($start)); //结束值 也便是数组中的末了一个值对应的下标 $end = $last = $strlen - 1; //5 //$length 也便是要处理敏感数据的个数 if ($length > 0) { $end = $begin + $length - 1; } elseif ($length < 0) { $end = $end - abs($length); // 5 - 1 = 4 } //用字符串,隐蔽对应的数据 for ($i = $begin; $i <= $end; $i++) { $container[$i] = $mark; } //把不符合逻辑的条件过滤掉, 这几个条件也便是限定我们通报的$start和$length参数是否合法 // 1.开始下标大于即是结尾下标 // 2.开始下标大于即是数组中的末了一个元素所对应的下标值 // 3.结尾值大于了数组中的末了一个元素所对应的下标值 if ($begin >= $end || $begin >= $last || $end > $last) { return false; } //合并数组,返回字符串结果 return implode('', $container);}
然后我们来试试看数据脱敏
代码如下
// 用户表数据$users = [ ['name' => '张晓明', 'phone' => '13812345678', 'email' => 'zhangsan@example.com'], ['name' => '李大嘴', 'phone' => '13987654321', 'email' => 'lisi@example.com'],];// 对用户表进行循环脱敏处理foreach ($users as &$user) { //$user = dataDesensitization($user); foreach ($user as $key=>$value){ if($key=='name'){ $user[$key]=_DataDesensitization($value,1,2,''); }else if($key=='phone'){ $user[$key]=_DataDesensitization($value,3,4,''); } }}unset($user);// 输出脱敏后的用户表数据print_r($users);
结果如下
小结
数据脱敏是项目中很常见的一种数据保护办法,我们往后也会常常用到这个小技巧!
关于数据脱敏还有很多,不仅仅是这些,有韶光在给大家深入分享数据脱敏的更多知识!
大家的支持便是我坚持的动力!
如果文章对你有帮助的话就请
点赞 ✍️评论 收藏
一键三连哦!
如果以上内容有任何缺点或者不准确的地方,欢迎不才面 留个言指出!
或者你有更好的想法,欢迎一起互换学习❤️