2010-07-25 70 views
5

Facebook和其他人提供我可以放在我的網站的小iframe snipplets。 例子:瞭解第三方iframes安全性?

<iframe src="http://www.facebook.com/widgets/like.php?href=http://example.com" 
     scrolling="no" frameborder="0" 
     style="border:none; width:450px; height:80px"></iframe> 

我想知道的是,如果我把這個代碼我身邊裏面,他們能加載到我的網頁訪問我頁面的DOM的代碼?如果是的話,我會看到一些安全問題。

Likewise Facebook允許我將iframe放入他們的網站,這是facebook應用程序的工作原理。 那麼我可以從任何包含我的iframe的頁面挖掘任何數據嗎?

注意我在這裏使用了facebook作爲示例,但許多公司都做同樣的事情,所以這個問題並不是特定於facebook的,所以我沒有將它標記爲這樣。

也可以通過父頁訪問iframe的DOM嗎?

回答

3

實際上有inheritance for iframes的具體規則。這是同源政策的一部分,我強烈建議您閱讀整個Google瀏覽器註冊手冊。

+0

非常有用的鏈接 – 2012-07-10 08:04:04

3

我知道父頁面可以訪問iframe的DOM。最近我們有一個項目在工作,我們有一個網站需要符合508。 iframe不是,儘管屏幕閱讀器處理iframe要好得多,但此iframe中的內容不符合規定。我們將jquery庫加載到我們的站點中,然後還將代碼加載到我們的站點中以操縱iframe(僅在加載後),並在此時混合iframes內容以便訪問。

給你一個關於我們如何做到這一點的想法是我們的​​jQuery的一個樣本。 (使用了很多發現和替換,但你明白了,你可以做其他事情。)

$('iframe').load(function() { 
    var f = $(this).contents(); 
    f.find('#sysverb_back').remove(); 
    f.find('a.column_head').each(function(){ 
     $(this).attr('title', $(this).text()); 
    });   
    f.find('img[title]:not([alt])').each(function(){ 
     $(this).attr('alt',$(this).attr('title')); 
    }); 
    f.find('input').filter(function() { 
     return this.id.match(/sys_readonly\..+|ni\..+/); 
    }).each(function() { 
     $(this).before('<label for="'+this.id+'" style="display:none;">'+this.id+'</label>'); 
    }); 

}); 

});

雖然我不知道你是否可以從iframe訪問父DOM。

+0

訪問parnet DOM是我看到安全問題的地方,我同意訪問子iframe內容應該被允許。 – Winforms 2010-07-25 13:37:55

+2

@Winforms不應該這樣做,因爲攻擊者在訪問他們的網站時可能會將一個'