OCR:parse_layout 结果包解析仍漏出原生异常,且 download_url 不限制主机 #37

Open
opened 2026-10-22 15:42:40 +08:00 by iomgaa · 0 comments
Owner

背景

#34 的独立对抗式审查(research-wiki/reviews/2026-10-22-issue34-branch-review.md §4 M-4 与 I-3)发现两处基线即有的缺口。#34 为保持 parse_layout 行为不变(医院线在用),只在新增的 parse_document 路径上做了加固,这两处在 parse_layout 上没有动。

问题 1:parse_layout 的 ZIP 解析路径漏出原生异常

parse_layout 解析结果包时,外部数据触发的 OverflowError / NotImplementedError / RuntimeError(加密成员、未知压缩方法、巨大整数等)不会被归入 errors.py 四分类,而是以原生异常漏出 OcrClient。

后果:客户端既不写终态遥测行,也不归还半开探针——违反「错误分类驱动」与「遥测必录」两条库铁律。parse_document 路径(transports/_monkey_document.py)已用统一的外部数据异常边界落 ResultInvalidError,可作蓝本。

问题 2:download_url 不限制主机

/parse 第一段响应里的 download_url 若是绝对地址,transport 会直接去取,不校验主机是否属于该源的 base_url。#34 只补了「畸形 URL → 瞬时错误」的校验,没有限制主机(基线接受绝对地址,限制会改变既有行为)。

需评估:服务被攻陷或被中间人改写响应时,是否构成 SSRF 面;是否应默认只允许同源,并为合法的跨主机部署(下载走另一个出口)留显式配置。

本 issue 要决定的

  1. 问题 1:把 parse_layout 的 ZIP 路径也收进统一异常边界。这会把原先「漏出原生异常」的输入改归 ResultInvalidError,属公共行为变更,但没有已知消费者依赖漏出行为。
  2. 问题 2:是否限制 download_url 主机、默认策略、是否可配置。涉及公共承诺,需走 brainstorming。

两者都不阻塞 #34 的 1.3.11 发布。

## 背景 #34 的独立对抗式审查(`research-wiki/reviews/2026-10-22-issue34-branch-review.md` §4 M-4 与 I-3)发现两处**基线即有**的缺口。#34 为保持 `parse_layout` 行为不变(医院线在用),只在新增的 `parse_document` 路径上做了加固,这两处在 `parse_layout` 上**没有动**。 ## 问题 1:`parse_layout` 的 ZIP 解析路径漏出原生异常 `parse_layout` 解析结果包时,外部数据触发的 `OverflowError` / `NotImplementedError` / `RuntimeError`(加密成员、未知压缩方法、巨大整数等)不会被归入 `errors.py` 四分类,而是以原生异常漏出 `OcrClient`。 后果:客户端既不写终态遥测行,也不归还半开探针——违反「错误分类驱动」与「遥测必录」两条库铁律。`parse_document` 路径(`transports/_monkey_document.py`)已用统一的外部数据异常边界落 `ResultInvalidError`,可作蓝本。 ## 问题 2:`download_url` 不限制主机 `/parse` 第一段响应里的 `download_url` 若是绝对地址,transport 会直接去取,不校验主机是否属于该源的 `base_url`。#34 只补了「畸形 URL → 瞬时错误」的校验,**没有**限制主机(基线接受绝对地址,限制会改变既有行为)。 需评估:服务被攻陷或被中间人改写响应时,是否构成 SSRF 面;是否应默认只允许同源,并为合法的跨主机部署(下载走另一个出口)留显式配置。 ## 本 issue 要决定的 1. 问题 1:把 `parse_layout` 的 ZIP 路径也收进统一异常边界。这会把原先「漏出原生异常」的输入改归 `ResultInvalidError`,属公共行为变更,但没有已知消费者依赖漏出行为。 2. 问题 2:是否限制 `download_url` 主机、默认策略、是否可配置。涉及公共承诺,需走 brainstorming。 两者都不阻塞 #34 的 1.3.11 发布。
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: iomgaa/PolyGateway#37