我正在为我的网站访问者编写firefox附加组件。我正在尝试使该扩展加载远程javascript文件,因此访问者可以在网站上为插件更改其配置文件中的设置和选项,并且插件通过远程js加载它。 这是我试过的:
if(window.location.hostname=="link") {
pagesload='http://link/file.js?v='+randnw;
var req = new XMLHttpRequest();
req.open('GET', pagesload, false);
req.send();
var contents = req.responseText;
eval(contents);
}
答案 0 :(得分:4)
不要做那样的事情!这是一个安全噩梦(即使你只是在内容脚本中运行它)。
如果您计划在mozilla附加组件库(AMO)中发布加载项,因为这样做会违反Add-on Guidelines,您的AMO提交将被拒绝和/或您的自托管附加组件会因发现时不安全而被列入阻止列表。
main.js
。在SDK模块中运行时,它将具有完全特权,可以执行系统用户帐户可以执行的任何操作。窃取所有用户cookie只是第一步。而不是eval
使用某些远程脚本,只交换数据,如JSON,XML,纯文本等,并在使用之前验证数据(不要简单地信任远程数据)。
从SDK模块,包括。 main.js
,您可以使用request
或net/xhr
模块,这两个模块都没有相同的来源政策。
如果需要,可以将内容脚本设置为cross-domain content scripts,但即使没有它,他们也可以使用XMLHttpRequest
来运行他们所在的域。
您的问题也有使用同步XHR的代码段。不要使用同步XHR。强烈劝阻并认为这是网络上的一种不良做法,在附加组件中更是如此(反正并没有真正得到官方支持)。
不知道,您没有提供足够的细节来重现问题。例如。你甚至没有提到代码应该在哪里工作(main.js
,内容脚本,......)