火狐扩展名中的远程 Js 文件

Remote Js file in Firefox extension

本文关键字:Js 文件 扩展名 火狐      更新时间:2023-11-22

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

不要!

永远不要做这样的事情!这是一场安全噩梦(即使您只在内容脚本中运行它(。

如果您计划在 Mozilla 附加组件库 (AMO( 中发布附加组件,无论是否发布,因为这样做会违反附加组件指南,您的 AMO 提交将被拒绝和/或您的自托管附加组件将在发现时因不安全而被列入阻止列表。

为什么这是不安全的?

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

相反

与其eval一些远程脚本,不如只交换数据,如JSON、XML、纯文本等,并在使用前验证数据(不要简单地信任远程数据(。

如何检索

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

如果需要,可以将内容脚本

制作为跨域内容脚本,但即使没有内容脚本,它们也可以将XMLHttpRequest用于运行它们的同一域。

您的问题还有一个使用同步 XHR 的代码段。不要使用同步 XHR。强烈不鼓励这样做,并被认为是网络上的不良做法,在附加组件中更是如此(无论如何,那里并没有真正正式支持(。

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

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