银行卡掩码写成保留前六位后四位,安全评审指出中间主体只掩了四位,可推断空间太大,不符合行业要求。乍看像缓存或者权限的锅,追下去往往不是。
def mask_card(v):
return '*' * (len(v) - 4) + v[-4:]
追下去是这么回事:掩码规则是开发随手定的,没有对照 PCI DSS 和行业规范。保留位数越多,能还原出原卡号的可能越大。
「银行卡掩码规则」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,银行卡只保留后四位 前面全部掩掉;证件号保留前一位和后一位;规则写进文档并与合规确认;加单元测试固定保留位数。
验收就看一点,所有卡片只显示后四位 评审用例全部通过。
