背景
最近有不少优质客户反馈被大量电话骚扰,第一天下单,第二天就被营销电话轮番轰炸。
其实一个月前就出现了少量客户被骚扰的事件,我为了钓出内鬼,增加了数据导出监控日志,但是我们的优质客户被卖了,明显不是批量出卖的,而是内鬼经过逐个分析用户质量后精准窃取来出卖的。
目前来看情况比较严峻,时不待我,钓鱼的意义不大了。
安全隐患
经分析,我们的系统存在4个安全空白区:
- 管理后台有个主账号有多人共用
- 离职人员的账号未及时清理
- 客户的个人信息和收货信息对任何员工都是可见的,这可能是最致命的
- 数据库用户的电话号码是明文存储的,技术人员全都可以查看,虽然相信技术人员的人品,但应有的防护还是得有
方案
- 管理后台落实一人一账号
- 清理离职人员的账号
- 用户的号码不明文展示,点击时再实时请求解密,并且请求解密作为一个权限行为来管理,再加入请求日志
- 数据库所有的电话号码全都进行加密保存,杜绝一切明文的电话号码
方案最优补充:隐私拨号
以上方案能很大限度地避免用户隐私泄漏,但也是百密一疏,因为有权限的员工依然有机会查看用户号码,机灵的员工会手工记录每个优质的用户资料整理成册,等哪天提桶跑路时把名册甩手一卖,公司很有可能遭到大量投诉。
对此,隐私拨号可以完美地杜绝电话泄漏的隐患。员工点击获取号码时,会为员工号码与客户号码绑定生成一个隐私号码展示给员工,员工拨打隐私号码时呼叫转移到客户号码,客户回电隐私号码也会呼叫转移到员工号码,在完成客户服务以后,隐私号码会解绑员工与客户的关系,互不打扰。如果员工需要再次联系客户可再次绑定隐私号码。
技术要点必备
//以下是PHP写的加密解密方法
/**
* 加密数据
* @param $str 需要保护的号码
* @param $key 密钥,加密和解密操作的密钥必须一致
* @param $start 开始加密的位置
* @param $end 截止加密的位置
*/
function data_enc($str,$key='love me',$start=3,$end=-3){
$arr = str_split($str);
$tail = count($arr);
if($end>0){
$tail = max($end, $start);
}else{
$tail = $tail+$end;
}
foreach ($arr as $idx=>&$a){
if($idx>=$start && $idx<$tail){
$a = chr(65+(ord(sha1($key))+$idx-$start)%17+$a);
}
}
return implode('',$arr);
}
/**
* 解密数据
* @param $str 需要保护的号码
* @param $key 密钥,加密和解密操作的密钥必须一致
* @param $start 开始加密的位置
* @param $end 截止加密的位置
*/
function data_dec($str,$key='love me',$start=3,$end=-3){
$arr = str_split($str);
$tail = count($arr);
if($end>0){
$tail = max($end, $start);
}else{
$tail = $tail+$end;
}
foreach ($arr as $idx=>&$a){
if($idx>=$start && $idx<$tail){
$a = ord($a)-65-(ord(sha1($key))+$idx-$start)%17;
}
}
return implode('',$arr);
}
//调用示例
$mobile = '13588888888';
$enc = data_enc($mobile);
$dec = data_dec($enc);
var_dump([$mobile,$enc,$dec]);//输出如: 13588888888,135LMNO8888,13588888888

评论列表(1条)