前端处理敏感数据截断存在本质的安全缺陷,因为前端代码运行在用户设备上,所有逻辑和返回的数据都可以被用户通过开发者工具查看、修改,攻击者只需要拦截接口返回的原始数据,就能绕过前端的所有截断规则,获取完整的手机号、身份证、银行卡号等敏感信息。因此敏感数据的截断和脱敏必须在后端完成,后端拿到原始数据后按照预设规则处理后再返回给前端,从根源上避免敏感信息泄露。

为什么敏感数据截断必须放在后端
前端的所有处理逻辑都是暴露在用户侧的,即使做了代码混淆,也无法阻止攻击者通过抓包、调试工具获取接口返回的原始数据。比如前端展示手机号时只显示前3位和后4位,中间用星号代替,但是接口返回的是完整的11位手机号,攻击者直接查看接口响应就能拿到完整号码。而后端处理是在服务器侧完成的,用户无法直接获取原始数据,只能拿到已经处理过的脱敏数据,安全性有本质提升。
常用的后端敏感数据截断策略
1. 固定规则截断策略
这是最常用的基础策略,针对不同类型的敏感数据预设固定的截断规则,比如手机号保留前3位和后4位,中间4位替换为星号;身份证号保留前6位和后4位,中间8位替换为星号。这种策略实现简单,适合大部分通用场景。
以下是Java实现的固定规则手机号脱敏示例:
public class SensitiveDataMaskUtil {
/**
* 手机号脱敏 保留前3位和后4位
* @param phone 原始手机号
* @return 脱敏后的手机号
*/
public static String maskPhone(String phone) {
if (phone == null || phone.length() != 11) {
return phone;
}
// 截取前3位和后4位 中间拼接4个星号
return phone.substring(0, 3) + "****" + phone.substring(7);
}
public static void main(String[] args) {
String rawPhone = "13812345678";
String maskedPhone = maskPhone(rawPhone);
System.out.println(maskedPhone); // 输出 138****5678
}
}
2. 动态规则配置策略
当不同业务场景对同一种敏感数据的截断要求不同时,可以使用动态规则配置策略。比如普通用户查看其他用户的手机号时只显示后4位,而客服角色查看时显示前3位和后4位,管理员可以查看完整手机号。这种策略需要结合权限系统,根据当前请求的用户角色动态选择截断规则。
以下是Python实现的带权限判断的手机号脱敏示例:
def mask_phone_by_role(phone, user_role):
"""
根据角色动态脱敏手机号
:param phone: 原始手机号
:param user_role: 用户角色 普通用户/客服/管理员
:return: 脱敏后的手机号
"""
if not phone or len(phone) != 11:
return phone
if user_role == "普通用户":
# 只显示后4位 前面全部替换为星号
return "*******" + phone[-4:]
elif user_role == "客服":
# 保留前3位和后4位
return phone[:3] + "****" + phone[-4:]
elif user_role == "管理员":
# 管理员返回完整手机号
return phone
else:
return phone
# 测试不同角色的脱敏结果
raw_phone = "13812345678"
print(mask_phone_by_role(raw_phone, "普通用户")) # 输出 *******5678
print(mask_phone_by_role(raw_phone, "客服")) # 输出 138****5678
print(mask_phone_by_role(raw_phone, "管理员")) # 输出 13812345678
3. 分级展示策略
分级展示策略是指根据数据的使用场景,返回不同完整度的数据。比如列表页只返回脱敏后的数据,详情页根据权限返回更完整的数据,需要完整数据的场景(比如支付校验)通过额外的鉴权接口返回,并且接口需要做更严格的权限校验和访问频率限制。这种策略可以进一步降低敏感数据泄露的风险。
4. 哈希截断策略
对于不需要还原原始数据的场景,比如用户唯一标识、日志记录中的敏感信息,可以使用哈希截断策略。对原始数据进行哈希计算后,只保留哈希值的前几位或后几位作为标识,这样既不会泄露原始数据,又能保证标识的唯一性。比如用户邮箱可以用SHA256哈希后取前8位作为日志中的用户标识。
后端截断策略的注意事项
- 所有涉及敏感数据的接口返回前都必须经过脱敏处理,不能有任何接口直接返回完整的敏感数据。
- 脱敏规则需要统一维护,避免不同接口使用不同的规则导致数据展示混乱。
- 对于需要前端做进一步处理的敏感数据,比如需要前端做部分展示的身份证号,后端返回时也需要先做基础脱敏,前端只能基于脱敏后的数据做二次处理,不能拿到原始数据。
- 脱敏逻辑需要做好单元测试,避免出现规则错误导致敏感数据泄露的情况。
总结
前端无法承担敏感数据截断的安全职责,所有敏感数据的脱敏工作都必须在后端完成。开发者可以根据业务场景选择固定规则、动态配置、分级展示、哈希截断等不同策略,结合权限系统实现灵活的敏感数据保护,从根源上避免用户隐私数据泄露,满足数据安全相关的合规要求。