客服截图发到群里,列表里一列身份证号全是明文,十八位一个不少。详情的打码只做在模板层,列表接口原样返回。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,脱敏写在前端模板里,接口仍然返回完整字段,换个页面或者直接抓包就看到了。导出和搜索接口同样没处理,同一份数据从三个口子出去。

「身份证脱敏」这类改动最怕改一半,回滚脚本先准备好,再动生产。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

function maskId($s) {
  return substr($s, 0, 6) . '********' . substr($s, -4);
}

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,在接口序列化那一层统一打码,保留前六后四,中间用星号;确实要看全号的场景单独走鉴权接口,并记操作日志;导出文件与搜索结果同样过这层,别只改列表。

最后用这个标准收尾,抓一次列表接口,返回里的身份证号中间是星号,详情页鉴权后才看得到全号。

作者 9823189