#1351·trix

消毒程序和解析程序选项通过原型链进行解析

作者: rosa创建于 2026年9月6日更新于 2026年9月6日

HTMLSanitizer'和HTMLParser'将其与安全有关的设置作为结构化选项,但默认为:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? // src/trix/models/html sanitizer.js (中文(简体) ). 构造器(html, {允许属性, 被禁协议, 被禁内容, 被禁内容, 被净化的选项 } = {} { 允许属性 = 允许属性 3⁄4 ̄ ̧漯B 禁止内容 = 禁止内容 = DEFAULT FORBIDDEN 要点 此选项。 净化选项=净化选项 。


{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
// src/trix/ models/html parser.js (英语).
构造器(html, {参考元素, 净化选项 } = {}) {

分解结构是读取的属性,所以每个名称沿着原型链解决. 我们自己的呼叫站点没有这些密钥(views/attachment view.js'、models/editor.js'、models/composition.js'、core/serialization.js'),就没有选项,也没有文字,因此,如果`object.promotive'带有这四个名称中的任何一种,则该值胜于默认值。

净化选择 ' 是最能达到的,因为卫生()'确实:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 整齐纯洁 Config = Object.asign ({}, config.domfurify, this.purify options) 纯正可选选项 DOMPurify.set Config( 纯化 CineConfig) 互联网档案馆的存檔,存档日期2013-12-02.


继承的价值被合并到**over**`Trix.config.dompurify',因此嵌入器的硬化被压倒而不是结合. 由于`setConfig ()'在无相匹配的`clearConfig ()'的情况下称为`setConfig ()',这种配置作为剩余状态继续存在,后来在`models/ string  piece.js'、`views/attachment view.js'和`controlers/toolbar controller.js'中读作`DOMPurify.is ValidAtization'。

* 范围,明确阐述

这是深入的辩护,而不是一个可直接利用的问题。 要达到这个目标,需要从页面的其他地方取出原型-污染原始物,任何可以写给`Object.prototype'的东西都已经有脚本执行,此时消毒剂不是攻击者与使用者之间的站点。 我们不知道Trix有一个提供这种文字的装置,我们具体检查了一名候选人:它只取代内部物体的原型,使`Object.prototype'未受影响。

无论如何,我们正在归档它,因为通过原型链读取与安全相关的配置,即使目前没有任何东西能够到达它,也是一种糟糕的默认,它使得Trix对于嵌入者来说是不必要的脆弱,他们自己的应用中可能有着这样的原始.

建议的方向

在不咨询原型链的情况下解决这些选项,例如,在使用前将选项对象作为一个整体,并检查`Object.hasOwn(选项,密钥)',或通过每个构造器顶端的`Object.asign(object.create(null),选项)'使其正常化。 对`HTMLParser'的`参考内容'和`净化备选内容'适用同样待遇,并在消毒后考虑`清楚的Config()',这样,DOMPurify状态在两次通话之间并不持久。

* 信贷

我们的Hacker One计划,
. . . . . . .