Firefox扩展中的远程Js文件

时间:2015-02-15 19:23:48

标签: javascript firefox firefox-addon firefox-addon-sdk

我正在为我的网站访问者编写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);
}

1 个答案:

答案 0 :(得分:4)

不要!

不要做那样的事情!这是一个安全噩梦(即使你只是在内容脚本中运行它)。

如果您计划在mozilla附加组件库(AMO)中发布加载项,因为这样做会违反Add-on Guidelines,您的AMO提交将被拒绝和/或您的自托管附加组件会因发现时不安全而被列入阻止列表。

为什么这不安全?

  • 您正在加载的远程脚本将在另一个更高(安全)的上下文中运行,该上下文是show-stopper。在内容脚本中运行时,它可能会执行内容脚本可以执行的所有操作。 (滥用)消息传递完全特权的SDK模块,包括。 main.js。在SDK模块中运行时,它将具有完全特权,可以执行系统用户帐户可以执行的任何操作。窃取所有用户cookie只是第一步。
  • 永远不会信任远程脚本。
  • 通过http传输时,攻击者可能很容易发起中间人攻击。
  • 当通过https传输时,虽然中间人攻击变得不那么可行,但服务器运营商可以做任何他们想做的事情。服务器运营商不一定是你自己。在此期间服务器可能已被泄露,或者域的所有权可能已被转移。

相反

而不是eval使用某些远程脚本,只交换数据,如JSON,XML,纯文本等,并在使用之前验证数据(不要简单地信任远程数据)。

如何检索

从SDK模块,包括。 main.js,您可以使用requestnet/xhr模块,这两个模块都没有相同的来源政策。

如果需要,可以将内容脚本设置为cross-domain content scripts,但即使没有它,他们也可以使用XMLHttpRequest来运行他们所在的域。

您的问题也有使用同步XHR的代码段。不要使用同步XHR。强烈劝阻并认为这是网络上的一种不良做法,在附加组件中更是如此(反正并没有真正得到官方支持)。

为什么问题中的代码不起作用?

不知道,您没有提供足够的细节来重现问题。例如。你甚至没有提到代码应该在哪里工作(main.js,内容脚本,......)