Mozilla Firefox的XPCSafeJSObject包装器实际上做了什么?

MDC 的文档如下:

  

创建此包装器是为了解决XPCNativeWrapper的一些问题。特别是,一些扩展希望能够安全地访问非本机实现的内容定义对象(以及在没有强大行为保证的情况下访问XPCNativeWrapper下的底层JavaScript对象)。 XPCSJOW充当chrome代码之间的缓冲区。

这并没有告诉我很多。特别是,我不知道如何通过XPCSafeObject访问对象与直接访问它们有什么不同。

编辑:我知道包装器的目的通常是保护特权代码免受非特权代码的影响。我不明白(并且似乎没有记录)是 完全是XPCSafeJSObject如何做到这一点。

它是否只是在访问属性之前删除权限?

有帮助吗?

解决方案

包装器的目的通常是在与非特权代码交互时保护特权代码。无特权代码的作者可能会重新定义JavaScript对象以执行恶意操作,例如重新定义属性的getter以执行作为副作用的不良内容。当特权代码试图访问该属性时,它将执行坏代码作为特权代码。包装器阻止了这一点。 此页描述了这个想法。

XPCSafeJSObject为非本机实现的JavaScript对象提供了一个包装器(即不是窗口,文档等,而是用户定义的对象。)

编辑:有关如何实施,请查看源代码(目前还没有为我完全加载。)还在 DXR

其他提示

实际上XPCSafeJSObjectWrapper用于所有内容对象,包括窗口和文档(事实上它通常是最需要的。)我相信它的发明主要是为了阻止XSS攻击自动转变为权限升级攻击(通过对XSS进行攻击)浏览器本身)。至少现在如果发现XSS攻击(不幸的是人们会继续寻找),它不会危及整个浏览器。这是XPCNativeWrapper的一个自然发展,它最初是一个手册(因此容易被扩展意外滥用),以便浏览器保护自己免受XSS攻击。

包装器只是确保在没有chrome权限的情况下评估任何获得评估的代码。在没有此包装器的情况下直接访问对象可以允许代码以chrome权限运行,然后让代码执行任何操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top