2014-12-03 71 views
0

現狀是否有可能有選擇地限制iframe訪問其父文檔?

我有一個靜態的文件(文件A),即我控制,其包含加載另一個文檔(文件B),即我不控制iframe中。這兩份文件都由我「擁有」,並且它們託管在同一個域中,實際上位於同一臺服務器上。

我的問題

我可以限制文檔B擁有文檔A的編程範圍的訪問?我想揭露A到B的一些變量和函數,但沒有提供給父窗口毯訪問等

我知道,通過沙箱屬性,我能夠做關於父窗口訪問的廣泛的安全限制,但我正在尋找的是一種爲某些 JavaScript對象提供訪問權限的策略,但不提供其他訪問權限。這不是關於XSS或域限制的問題。正如我所說的,所有這些文件都位於同一臺服務器上,並且域名不存在問題。

回答

1

它確實取決於你想要允許的內容以及你想要隱藏的內容。你可以隱藏你的大部分代碼和函數,把它放在一個巨大的閉包中。其他代碼,即使是在同一個源代碼中,也無法通過閉包進入你的代碼或變量。然後,您可以將您想要的任何函數/方法公開爲全局函數,並且這些函數可以提供對對象的有限訪問。

// closure to protect code from tampering 
(function() { 
    // code in here can't be messed with from outside the closure 

    // this method can be called from the outside 
    // This function (when called) can return objects from withing the closure 
    // or modify objects within the closure 
    window.publicFunc1 = function() { 
    }; 
})(); 

你不能做的是控制從這個其他框架訪問DOM。如果它們位於相同的原點,則它可以完全訪問另一個幀的DOM。

如果您控制了一些基礎設施,您可以創建一個技術上指向同一服務器的子域,然後您可以從子域和主域中的其他框架加載頁面(反之亦然)。這會因爲跨源保護而給予您真正的保護,並且您可以使用消息傳遞以受控方式進行通信。

相關問題