2011-05-10 81 views
2

我開發Firefox擴展,並具有存儲一些值,我需要從任何其它分機/頁等的Javascript範圍/安全問題

我使用的設置安全和交通不便的我像擴展代碼在這裏看到:

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從新創建的窗口訪問它。謝謝。

+0

我不知道答案,但在附註中,您正在檢查是否要在第二行代碼中創建'namesp.anothernamesp',但是您仍然在第四行代碼處覆蓋它。我不認爲第二行代碼會添加任何內容。 – pimvdb 2011-05-10 07:33:14

回答

1

看起來很正確。事實上,這是大多數教程和書籍教導模擬私人方法和屬性的一種方式。

0

,有沒有辦法你可以保留一個擴展影響另一個擴展。

的原因是:

  • 擴展名重命名爲有*的.xpi文件擴展名拉鍊歸檔文件。
  • 使用JavaScript方言在擴展文本文件中寫入擴展
  • 任何其他擴展可以打開並訪問您的瀏覽器可以訪問的任何文件。

如果一些其他的擴展想要閱讀您的變量mySecureValue它可以這樣做:(使用nsIFileprofile/extensions文件夾閱讀)

    • 訪問您的擴展名爲*的.xpi文件解壓縮nsIZipReader
    • 從源文件讀取變量mySecureValue

    所有這一切的最不幸的原因是,Mozilla的火狐並沒有實現任何形式的擴展之間的權利分離。每個擴展都可以爲每個人做一切。它甚至可以豁免shellcode並對其他損害進行仲裁。

    您可以嘗試的唯一方法是混淆您的祕密數據。這雖然不會阻止,但也許只會使攻擊複雜化。