← 中文资源

简体中文版本

为日志脱敏电子邮件地址

隐藏邮箱本地部分而保留域名,处理短地址,并可选择遮蔽子域名。

阅读英文原文

功能说明

maskEmail 用于在日志、错误信息和审计记录中降低电子邮件的可识别性。它保留域名,便于排查投递问题,同时把本地部分压缩成首字符、固定三个星号和末字符;一两个字符的短地址采用更保守的规则,避免暴露过多信息。可选的 maskDomain 会把除顶级域外的所有域名标签替换为等长星号,适合域名本身也属于敏感信息的场景。

函数会先做基本格式校验,包括长度、空白字符、唯一的 @、非空本地部分和合理的域名结构。校验失败时抛出错误,调用方可以决定记录原始长度还是跳过该条日志,而不是把未脱敏的地址写出去。

关键代码

本地部分按长度分支处理,域名部分可以选择逐标签遮蔽:

if (local.length === 1) {
  maskedLocal = "*";
} else if (local.length === 2) {
  maskedLocal = `${local[0]}*`;
} else {
  maskedLocal = `${local[0]}***${local[local.length - 1]}`;
}

开启域名遮蔽时,最后一段顶级域保留,其余标签用与标签长度相同的星号替换,因此输出长度仍然稳定。

使用注意

该函数只做展示层脱敏,不适用于需要不可逆匿名化的合规场景;对于很短的本地部分或唯一域名,仍可能被推断出身份。它不解析显示名称形式,例如 Alice <[email protected]> 会因空白被拒绝,调用前应先提取纯地址。国际化域名和带引号的本地部分也没有完整支持。

域名校验只检查点号结构,不验证 DNS 是否真实存在。maskDomain 会把 mail.example.com 变成 ****.*******.com,但顶级域仍然暴露。若地址包含多个 @ 或本地部分为空会抛错。异常信息不包含原始地址,适合直接记录,但仍建议调用方统一捕获。

验证方式

示例分别输出 [email protected]、两字符地址、一字符地址和开启域名遮蔽的结果,观察本地部分只保留首尾字符,短地址按规则减少暴露。最后传入 not-an-email,应捕获并输出 invalid email address。可以再补充大小写、前后空格和连续点号等边界输入,确认校验行为符合预期。