摘要

  • RIPE Whois 1.124 增加了历史版本的纯文本响应。它提供的是经过过滤的历史对象,不是当年原始更新请求的存档。
  • 在所审查的代码路径中,纯文本正文在结构化响应写入历史版本编号之前就已返回。保存正文时,应另外保留查询的对象、版本编号与表示方式;不能据此推断所有响应头也缺少上下文。

一份历史记录存成文本文件后,可能仍然很好读:对象的主键、网络描述、联系字段都在眼前。但如果保存者没有留下查询地址,后来的人凭什么知道,它是哪个历史版本、以什么参数取回的?这是一个归档场景,不是本文发现的一次错误取证。RIPE 新近提供的纯文本历史响应,使这个老问题变得具体。

RIPE Whois 1.124 的发布说明列出了历史版本接口支持纯文本这一变更。GitHub 发布页日期为 2026 年 8 月 12 日;RIPE 的发布记录列出的候选版本和生产部署日期分别是 8 月 13 日和 8 月 27 日。本文在 9 月回看这个功能,不把它写成 9 月的新发布,也不声称所有正在运行的安装都使用这个版本。分析对象是发布标签指向的代码和官方说明,不是对生产服务进行一次历史查询后得出的测量报告。

纯文本有充分的使用理由。RPSL 本来就是便于网络运营人员阅读的记录格式,少一层响应包装,命令行脚本、差异比较和手工检查都可以更直接。一个方便阅读的表示,不必同时承担完整证据包的职责。风险出现在使用者默默把前者当成后者时。

请求的历史版本并不是由正文中的任意日期来决定的。所审查的 WhoisVersionService 为选定版本构造包含 SELECT_TYPES 和 SHOW_VERSION 的查询;后者携带所请求的历史版本编号。服务器随后找出相应的历史 RPSL 对象。这说明请求路径是定位历史版本的重要线索。对象里的备注或日期可以有业务意义,却不能自动替代响应包装中的版本标识。

不过,找到了历史对象,也不等于取回当年的原始输入。VersionQueryExecutor 在把所选版本装入返回对象之前,应用电子邮件、认证、changed 和个人信息相关的过滤器。这里的“历史”指可供返回的历史对象版本,不是无删节的原始 HTTP 请求、邮件更新正文或全部内部记录。过滤有保护隐私与敏感信息的正当目的。本文也不据此断言每个历史字段都必然改变,或某份返回文本绝不可能与当年的某份提交文本相同;关键是接口本身没有作出“原始交易档案”的保证。

接下来,两种表示走上不同的分支。Accept 头包含 text/plain 时,服务直接返回 getRpslObject().toString()。这个返回发生在结构化映射器运行之前,也在该分支后面的 WhoisObject.setVersion 调用之前。因此,纯文本正文走的路径,没有执行结构化响应显式写入历史版本编号的那一步。

这个结论的范围很窄,也很重要:它说的是所选代码路径生成的正文。本文没有审查全部拦截器、代理和响应头,不能把它扩写成“服务器从未提供版本上下文”。原始请求 URI 仍然可以把对象和所请求的版本联系起来。若客户端把 URI 和正文一起保存,那条联系就没有因为正文是纯文本而必然丢失。

结构化分支则把已解释的 unformatted 参数交给服务器属性映射器,并设置对象的历史版本编号。外层还可以包含服务软件版本、错误与使用条款等信息。这里至少有两种“版本”:对象的历史修订编号,以及运行服务的软件版本。前者回答“正在看哪次对象修订”,后者回答“哪个服务实现生成了响应”。二者互换,会让一份看似精确的记录失去真正需要的定位。

unformatted 也不能被读成“恢复原始提交”。在这条路径里,它影响结构化属性映射;纯文本分支已提前返回,绕过了这个映射器。它不是一个撤销前述过滤器、取回原始邮件或证明提交人权限的通用开关。“不格式化”描述的是处理方式,不是证据完整性的等级。

实际的归档改进可以很朴素:与正文同时记录请求 URI、来源数据库、对象类型与主键、历史版本编号、Accept 和 unformatted 参数、抓取时间、相关响应头,以及保存的表示和其哈希。这里提出的是使用者的取证习惯,不是宣称 RIPE 已要求客户端这样做。不同团队可有不同保存格式,但不宜把识别上下文寄托在文件名或记忆上。

哈希能证明文件里的字节是否仍与保存时一致,不能把没有保存的查询信息重新变出来。日后显示规则或过滤规则若有变化,同一历史版本的可见表示也可能不同;这是值得考虑的情景,不是本文观察到的篡改或资源变更。一个身体健全的证据链,应分别说明历史版本、生成表示的服务和保存动作。

RIPE 提供纯文本并不是错误;以此声称某次资源更新的授权、原始内容或权利归属得到完整证明,才跨过了接口没有承诺的边界。正文可以轻,归档责任不能跟着消失。

来源

  1. RIPE Whois 1.124 发布说明
  2. RIPE Database 官方文档与发布记录
  3. 固定发布提交中的 WhoisVersionService
  4. 历史版本执行器与过滤器顺序
  5. 服务器属性映射器
  6. 结构化对象映射器
  7. 历史 RPSL 返回对象