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

时间:2011-05-10 07:18:12

标签: javascript security firefox-addon scope

我正在开发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从新创建的窗口访问它。谢谢。

2 个答案:

答案 0 :(得分:1)

似乎很正确。实际上,这是大多数教程和书籍教授模拟私有方法和属性的方式。

答案 1 :(得分:0)

无法您可以阻止一个扩展程序影响其他扩展程序。

原因是:

  • 扩展名是Zip-archive-files重命名为* .xpi文件扩展名。
  • 使用JavaScript方言
  • 在纯文本文件中编写扩展名
  • 任何其他扩展程序都可以随时打开并访问您的浏览器可以访问的任何文件。

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

  • 访问您的扩展程序* .xpi文件(使用nsIFileprofile/extensions文件夹中读取)
  • 解压缩nsIZipReader
  • 从源文件中读取变量mySecureValue

所有这一切最不幸的原因是Mozilla firefox没有在扩展之间实现任何形式的正确分离。每个扩展都可以为每个人做好一切。它甚至可以超越shellcode并对其他伤害进行仲裁。

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