插件是否可以(如何)允许文档/页面/内容范围中的特定功能在浏览器范围内运行?
(我很清楚安全隐患,这是非常具体的,也是出于特定目的。)
作为一般示例,内容脚本中的XMLHttpRequest
具有内容范围。
通过GreaseMonkey GM_xmlhttpRequest
具有浏览器范围。
想象一下,在内容脚本中使用GM_xmlhttpRequest
并希望插件允许GM_xmlhttpRequest
在浏览器范围内运行。
答案 0 :(得分:1)
在编写页面脚本时,通常会涉及3个单独的安全范围(称为principals)。
因此,如果您想运行执行跨源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的需求更加有限,您可以在沙箱之外进行处理,并且只提供将处理结果返回到沙箱的函数。