摘要
- 2026 年 9 月 10 日发布的
draft-ietf-mailmaint-smtputf8-syntax-05,不再自行枚举几类可用字符,而是把判断交给 PRECIS IdentifierClass,并要求满足适用的上下文规则。 - 新版举出两类明确拒绝的输入:可能显示为空的 U+3164 HANGUL FILLER,以及只会拉长前一个阿拉伯字母、可制造许多视觉拼法的 U+0640 ARABIC TATWEEL。
- 字符通过准入只证明它满足这套拟议语法;它不能证明邮箱存在、申请者控制邮箱、地址能沿 SMTPUTF8 路径送达,或显示出来的身份可信。
- 第 05 版关于引号内空格与地址标点的原文仍有不一致。实现者应等待澄清并记录自己的解释,不能默默把猜测当成标准。
截图无法保全的那一个码位
设想注册系统和账户恢复系统各自留下一条记录。两块屏幕显示的都是普通管理员邮箱;一个系统接受,另一个拒绝。后来排查时,工程师才发现被拒绝的本地部分多了 U+3164。这个 HANGUL FILLER 在所用字体里没有可见宽度,但它仍然存在于 UTF-8 输入中。
问题并不始于攻击者,也不止于“长得像”。表单可能原样保存,搜索服务可能先做规范化,日志可能只保留渲染结果,邮件网关又可能采用另一套字符表。每个组件都能给出看似合理的布尔值,而没有一项布尔值解释其他组件为何不同。
第 05 版草案把 U+3164 写成反例:它看起来什么也没有,却不能进入地址。新版还加入 U+0640 ARABIC TATWEEL。这个码位按 Unicode 一般分类属于字母,但作用是延长前一个阿拉伯字母;反复插入会给同一视觉词形制造数量不定的拼写。
Datatracker 条目显示,该文档是 Mail Maintenance 工作组的活跃 Internet-Draft,目标状态为 Proposed Standard。历史记录把第 05 版记在 9 月 10 日。这只是正在审议的文本,不是 RFC、部署证明或已经发生的安全事件。
从“列出类别”改为“执行分类”
第 04 版的第二条规则直接列出 RFC 8264 的 A、H、K、F 四类以及地址标点。第 05 版改写为:地址只能含有 PRECIS IdentifierClass 判定为有效的码位;若某个码位需要上下文规则,还必须通过那条规则。
这不是单纯缩短句子。复制一份类别清单,很容易把“需要上下文”误做成“无条件允许”。RFC 8264为 IdentifierClass 设置了有效、需要上下文、禁止和尚未分配四种处置。连接控制字符是否可用,取决于相邻字符和指定算法。只查看 Unicode 大类,判断链就没有走完。
PRECIS 把 IdentifierClass 用于能够标识或寻址网络实体的协议字符串,并明确把安全优先于表达范围。传统字母、数字和可打印 ASCII 可以进入;旧式 Hangul Jamo、控制符、可忽略属性、空格、符号、兼容分解字符等则受到禁止。框架同时说明,具体 profile 仍要定义宽度映射、其他映射、大小写、规范化和方向规则。
因此,第 05 版并不意味着旧版允许的全部字符突然被禁止。真正改变的是权威定义放在哪里,以及“上下文判断”是否成为显式合规步骤。若实现继续长期维护自己的静态表,引用 PRECIS 的意义就被架空了。
“Letter”不是最终裁决
U+0640 最能说明分类权力的层次。RFC 5892把 ARABIC TATWEEL 单独列入 Exceptions,并标为 DISALLOWED;如果只执行一般属性计算,它原本会得到 PVALID。例外表改变了结果。日志只写“这是一个字母”,无法证明准入判断正确。
作者公开的测试集还覆盖双向控制符、全角兼容字母和可组合的旧式 Hangul Jamo,并把预组合的对应韩文音节作为不同结果。测试让边界可以复现,却不能证明生产中的注册、登录、目录、恢复、邮件传输和导出环节都运行同一版本。
草案第三条规则保持不变:忽略 ASCII 后,一个地址不得出现一种以上的文字系统。它允许 Han 加 ASCII 的组合,却拒绝 Han 与非 ASCII 拉丁字符混用。Unicode Standard Annex #24提供了这里所说 Script 属性的定义。这是草案为地址互操作设置的准入线,不是对多语言姓名或组织合法性的评价。
引号里的空格仍需澄清
当前第 05 版有一处不能替作者补写的文字。第二条规则原文说,地址只能包含 IdentifierClass 视为有效的码位,以及一个引号中的空格;紧随其后的例子又单独提到点、斜杠和 at 符号。公开的作者源文件也保留了同样句子。
它可能是排版错误,也可能依赖上层邮箱语法,或只是尚未完成的修订。现有证据不能判断。尤其因为标点负责分隔本地部分与域名,字符类别和语法产生式并不是同一层规则,任何实现都应把自己的解释写进测试和版本记录,等待后续文本解决。
语法有效不等于身份有效
RFC 6532允许在国际化邮件头部和地址中直接使用 UTF-8。当前草案进一步尝试收窄哪些国际化地址字符串更适合互操作。但通过这两层规则的字符串,并不会自动获得邮箱所有权或人类身份。
邮箱可能不存在;域名可能合法却具有欺骗性;地址可能在输入端通过,却在账户恢复或导出时损坏;某一跳支持 SMTPUTF8,也不能证明整条送达路径都支持。反过来,一个用户提交被禁止码位,也不证明其恶意——他可能只是从视觉材料复制了自己无法看见的字符。
BTW 先前的 SMTPUTF8 历史文章讨论的是另一条边界:国际化本地部分没有通用降级形式,因此相关传输节点必须保全它。本篇只处理输入字符串是否通过第 05 版准入谓词。传输能力与字符准入可以分别失败。
为准入决定留下一张收据
可审计的记录不应只有 true 或 false。它至少要保存原始 UTF-8 字节、按顺序展开的码位、当前检查的是邮箱语法哪一部分、每个非 ASCII 码位的 IdentifierClass 处置、适用的上下文规则及结果、文字系统计算,以及服务采用的映射、大小写、规范化和方向策略。
随后再记录 Unicode/PRECIS 数据版本、验证器构建版本、调用入口、决定时间、最终动作与纠正路径。面向操作员的界面可以同时显示安全转义和可读字符串,原始值则进入受保护证据;不能让日志再次把不可见字符抹掉。
这张准入收据是 Daniel Kade 的编辑建议,不是 IETF 要求。它不统一各服务的账户政策,只让注册表单、API、恢复系统和邮件网关能够说明:它们是否对同一输入、依据同一版本、作出了同一类决定。
信息来源
- IETF 最近文档
- Datatracker 文档条目
- Datatracker 文档 API 条目
- 公开维护仓库
- 文档历史
- 第 05 版
- 第 04 版
- 官方版本差异
- RFC 8264 — PRECIS 框架
- RFC 5892 — IDNA 码位规则
- RFC 6532 — 国际化邮件头
- RFC 5890 — IDNA 定义
- Unicode 标准附录 #24
- 公开作者测试
- Heng Lu — The Policy Mirror
- Heng Lu — Minimum Initial Specification
- Heng Lu — Why Reality, Not Advocacy, Is the Product
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance

