3

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

MDC的文档如下:

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

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

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

它只是在访问属性之前放弃特权吗?

4

3 回答 3

4

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

于 2009-10-09T19:51:40.583 回答
3

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

于 2009-05-09T17:10:26.603 回答
1

一般来说,包装器的目的是在与非特权代码交互时保护特权代码。非特权代码的作者可能会重新定义一个 JavaScript 对象来做一些恶意的事情,比如重新定义一个属性的 getter 来执行一些不好的事情作为副作用。当特权代码尝试访问该属性时,它会将错误代码作为特权代码执行。包装器可以防止这种情况。这个页面描述了这个想法。

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

编辑:关于它是如何实现的,请查看源代码(目前它还没有完全加载。)还可以在DXR上搜索 XPCSafeJSObject 以获取其他相关的源文件。

于 2008-10-27T16:47:54.127 回答