Javascript 范围/Firefox 扩展中的安全问题

Javascript scope / security concern in Firefox extension

本文关键字:安全 问题 扩展 范围 Firefox Javascript      更新时间:2023-09-26

我正在开发一个FireFox扩展,并且必须存储一些我需要安全且无法从任何其他扩展/页面等访问的值。

我正在使用扩展代码的设置,如下所示:

if(!namesp) var namesp={};
if(!namesp.anothernamesp) namesp.anothernamesp={};
namesp.anothernamesp = function() {
  var mySecureValue = ''; //is this variable accessible from anything aside from inside the namesp.anothernamesp scope?
  return {
    useSecureValue: function() {
    //do something here with mySecureValue
    }
  };
  function getSecureValue() { //can this method be called from anywhere besides inside the namesp.anothernamesp scope?
    return mySecureValue;
  }
}();

除了我自己的扩展之外,有什么方法可以访问"mySecureValue"吗?为了使这个对象全局可访问我可能在扩展等中打开的任何窗口,我将对象传递给 window.openDialog() 方法中的窗口,并使用 window.arguments 从新创建的窗口访问它。谢谢。

看起来很正确。事实上,这是大多数教程和书籍教授模拟私有方法和属性的一种方式。

不,您无法阻止一个扩展影响另一个扩展。

原因是:

  • 扩展名是重命名为具有 *.xpi 文件扩展名的 Zip 存档文件。
  • 扩展名是使用 JavaScript 方言以纯文本文件编写的
  • 任何其他扩展名都可以随意打开和访问您的浏览器可以访问的任何文件。

如果其他扩展想要读取您的变量mySecureValue它可以通过以下方式执行此操作:

  • 访问扩展名 *.xpi 文件(使用 nsIFile 从profile/extensions文件夹中读取它)
  • 解压缩它 nsIZipReader
  • 从源文件中读取变量mySecureValue

最不幸的原因是Mozilla Firefox没有在扩展之间实现任何形式的权利分离。每个扩展都可以对每个人做任何事情。它甚至可以超过外壳代码并造成任意的其他损害。

您唯一可以尝试的就是混淆您的秘密数据。这虽然不会阻止,但可能只会使攻击复杂化。