[错误] 通过 `in` 进行 I18n 语言验证会导致 ?lang=constructor 破坏所有面板的翻译

作者: ztcools创建于 2026年7月30日更新于 2026年8月3日

□发生了什么事?

I18n'验证了与in'运营商的语言争论,后者走的是原型链条。 因此,任何 " 目标.原型 " 钥匙( " 构件 " 、 " 结构 " 、 " 原型 " 、 " 价值 " .)都通过。 校正,以及 This. translations' 被指定一个函数或Object.promtotype'而不是一个地块 对象。

随后的每次`t () ' 检索都失败,因此小组制作原始翻译密钥 ( " ui.panel. ready " 而不是 " Ready " ),每个电话发出一个 " 收音机.warn " 。

无法从不信任输入中获取: 演示项读取 URL 查询字符串中的 “ lang ” 和 用`as'表示,因此没有运行时间验证。

https://GitHub.com/alibaba/page-agent/blob/main/packages/page-agent/src/demo.ts#L35 (中文(简体) ).

const 语言 = (url.searchParams.get ("lang")为"zh-CN" |"en-US") ||"zh-CN"


** 预测:** 未知值回溯到`en-US',它已经用于普通无效输入
例如`?lang=fr-FR'。

** 实际:** `Object.prototype' 键绕过倒数键并断开每个翻译。

确切地说,严重程度:这不是****原型*污染*——没有任何字写给任何人。
原型。 这是一种验证空白 沉默地贬低UI。

根原因

https://GitHub.com/alibaba/page-agent/blob/main/packages/ui/src/i18n/index.ts#L14


这个. language = 当地语言? 语言:"en-US"

当地语中的``建筑者'是真',而Object.hasOwn(当地语:建筑者')'是假'。

建议改正

这个. language = Object.hasOwn( locales, language)? 语言:"en-US"


`Object.hasOwn'是ES2022,而“es2025”目标与`lib:['ESNext'、'DOM''相同,因此需要
没有下层处理。

相关,同根原因

`获得最新价值 ' 与`当前?.[关键] ' 减少,后者也跨越原型链,所以
`t('to String')'`返回`功能',即使签字声明`字符串':

https://GitHub.com/alibaba/page-agent/blob/main/packages/ui/src/i18n/index.ts#L33

在调查期间,我还在同一档案中发现了两个无关紧要的案件——一个`TypeError'当钥匙
解析到中间对象并“段落”被传递,空字符串翻译为
被“如果(!值)”检查视为缺失。 这些是分开的虫子,我宁愿把它们归档
别把它们混在一起 如果他们值得报道,告诉我

□如何再现/如何复现.

对照`main'上的`packages/ui/src/i18n/index.ts'(`b7401a0'),节点22.23.0.

之所以需要铸造,是因为`支持语言 ' 是一种工会类型——这正是重点:
以下数值作为运行时未验证的 " 字符串 " 运出。


从“ page- agent/ ui” 导入 { I18n }

new I18n ('fr- FR' as any). t ('ui.panel. ready') / “准备” QQ倒置作品
新 I18n (“ 构造者 ” as any) (“ ui. panel. ready ” ) / “ ui. panel. ready ” 已损坏 。
新 I18n ("- proto " as any). t ("ui.panel. ready") / ("ui.panel. ready" 已破损) QQ
新 I18n ('to string' as any). t ('ui.panel. ready') / ("ui.panel. ready"已破碎) QQ

观察 . . . . . . .

内容来源: alibaba/page-agent