2011-12-05 113 views
8

我有一個iframe頁面。頁面和iframe的來源位於不同的域中。在iframe中,我使用了一個名爲CuteEditor的豐富文本編輯器(事實證明它不是那麼可愛)。 CuteEditor中有一些javascript函數試圖訪問'文檔',但瀏覽器拒絕訪問,因爲它們不在同一個域中。如何防止iframe訪問父框架?

這裏是確切的錯誤:

Permission denied to access property 'document' http://dd.byu.edu/plugins/cuteeditor_files/Scripts/Dialog/DialogHead.js Line 1

編輯JavaScript是出了問題的,因爲它已經minfied和混淆,因此所有的變量名是神祕的。

使用不同的編輯器目前是沒有問題的,因爲這是一個工作項目,這是我被告知要使用的編輯器。

有沒有辦法讓iframe自成一體?所以它在iframe中執行所有操作,並且不會嘗試突出顯示父框架?

回答

-2

您不應該擔心這種情況。

iframes可以交叉處理的唯一方法是使用postMessage,這隻有在您直接監聽該域時纔有可能。

https://developer.mozilla.org/en/DOM/window.postMessage

+0

然而CuteEditor由於這個錯誤而不能在iframe中工作。那麼這是一個不同的問題嗎? – Justin

+0

我不確定。我們需要查看您的源代碼。 –

7

如果孩子的iframe從不同的域加載,那麼它將無法訪問父頁面或DOM。

但是,如下所示,中間人攻擊仍然存在一個可能的漏洞。假設你的頁面加載關閉http://yoursite.com和IFRAME去http://badsite.org

  • 第一http://badsite.org重定向到http://yoursite.com/badpage

  • 這是需要一箇中間人攻擊的步驟。攻擊者必須能夠在用戶和yoursite.com之間獲取,或者控制DNS查詢的答案。這比聽起來容易 - 任何對公共WiFi接入點具有行政控制權的人都可以這樣做(想想星巴克,酒店,機場)。目標是從攻擊者的網站,而不是您的實際網站提供http://yoursite.com/badpage的內容。

  • 然後,攻擊者可以從(假)http://yoursite.org/badpage中提供他們喜歡的任何惡意代碼。因爲它與主頁面位於同一個域中,所以它可以訪問父DOM。

HTML5 iframe沙箱屬性似乎是避免這種情況的方法。您可以閱讀spec,但最好的描述可能是here

這似乎支持ChromeIE10FireFox,Safari

規範說如果「allow-same-origin」屬性是而不是集合,則「該內容被視爲來自獨特的來源」。無論瀏覽器認爲URL是什麼,這應該會阻止您的子級iframe訪問父級DOM的任何部分。

+0

攻擊並非如此簡單。當設備從DNS獲取到yoursite.com的地址時,它將緩存進一步的訪問。要完全實施此攻擊,需要HTTP代理,並且中間人必須重寫網頁才能將http://yoursite.com/badpage用作iframe src。如果您使用HTTPS,這會變得更加複雜,因爲代理必須將HTTPS模仿爲HTTP才能更改頁面。這並非不可能,但除非網站對攻擊者(如銀行,拍賣或可用於收集密碼的訪問量巨大的網站)具有吸引力,否則您的曝光率很低。 – fernacolo