是否可以允许内容函数在浏览器范围内运行?

时间:2015-03-28 14:09:27

标签: firefox-addon

插件是否可以(如何)允许文档/页面/内容范围中的特定功能在浏览器范围内运行?
(我很清楚安全隐患,这是非常具体的,也是出于特定目的。)

作为一般示例,内容脚本中的XMLHttpRequest具有内容范围。 通过GreaseMonkey GM_xmlhttpRequest具有浏览器范围。

想象一下,在内容脚本中使用GM_xmlhttpRequest并希望插件允许GM_xmlhttpRequest在浏览器范围内运行。

1 个答案:

答案 0 :(得分:1)

在编写页面脚本时,通常会涉及3个单独的安全范围(称为principals)。

  • 系统主体(对所有内容的完全访问权限,包括操作系统API)
  • sandbox的扩展主体,可以限定为一个或多个原始域。即使它仅限于一个域,它仍然被认为比内容本身稍微有点特权
  • 页面本身的内容主体

因此,如果您想运行执行跨源XHR 的插件脚本,则无需将该特权授予页面内容本身

您只需将其授予运行插件脚本的沙箱,该沙箱由xray-wrappers与不受信任的页面内容分隔。

如果您正在使用插件sdk并且XHR域是有限集,则可以specify them in your addon configuration

如果您需要对任意域执行XHR,则必须降低到较低级别并使用frame scripts,它们具有系统主体权限,同时还能够操作页面内容。

出于安全原因,最好只使用framescript来实例化一个主要作用于页面的沙箱,然后inject a privileged XHR function into it,基本上是what greasemonkey does。或者,如果您对XHR的需求更加有限,您可以在沙箱之外进行处理,并且只提供将处理结果返回到沙箱的函数。