前端如何避免用户隐私数据被意外泄露?
最近在做用户信息展示功能,发现控制台打印了包含手机号和身份证的完整对象,担心这些敏感字段会被不小心传到日志或错误上报系统里。有没有办法在开发阶段就自动过滤掉这些字段?
我试过在输出前手动删字段,但每次都要写一堆 delete,太麻烦了。比如下面这段代码:
const user = {
name: '张三',
phone: '13800138000',
idCard: '11010119900307XXXX',
email: 'zhangsan@example.com'
};
// 手动删除太繁琐
delete user.phone;
delete user.idCard;
console.log(user); // 只想看非敏感信息
有没有更优雅的方式,比如定义一个白名单,自动剥离敏感字段?或者用 Proxy 拦截?
我用过几种方式,分享一个比较实用的方案:用一个专门的工具函数做脱敏处理,配合白名单机制。核心思路就是只保留你真正想看的字段,其他一概过滤掉。
比如你可以写个
sanitizeObject函数:如果你是想在所有
console.log调用时都自动脱敏,还可以封装一层:另外,如果你用的是 Node.js 环境,还可以通过重写
console.log来全局拦截,不过这个风险高点,容易误伤其他正常日志,不太推荐。还有一种更激进的做法是用 Proxy 做只读 + 字段过滤,不过调试起来可能反而更绕,尤其是你不确定哪些字段会被访问时,容易漏。
最后提醒一句:生产环境里尽量别在前端打敏感字段的日志,像
phone、idCard这些字段,后端上报错误时也最好提前过滤一遍,我见过有人把整个 error 对象直接上报的,结果把 stack trace 里的变量名都带上去了……惨痛教训啊。希望能帮到你,试试这个
sanitizeObject方案,简单好用,也不用动太多代码。