2010-07-26 34 views
5

我有一個https頁面(https://example.com/main.php),它具有帶非HTTPS源(http://example.com/inner.php)的iframe。這兩個文件都在同一臺服務器上 - 只有一個是使用https訪問的,另一個則不是。我需要的非HTTPS頁面可以使用下面的代碼的HTTPS main.php網頁上執行JavaScript作爲parent.myfunction()允許HTTP iFrame在HTTPS父框架上調用JavaScript

然而,當我嘗試,我得到了以下錯誤:

Unsafe JavaScript attempt to access frame with URL https://example.com/main.php from frame with url http://example.com/inner.php . Domains, protocols and ports must match.

我已經設置document.domain = 'example.com'這兩個文件,我認爲這會解決它,但是,它不。有什麼辦法可以讓框架在父框架上執行javascripts,反之亦然?如果是這樣,這會對安全產生什麼影響? PS:對於那些建議在兩個頁面中只使用https或http的人,我正在研究這個問題。但是,由於iframe頁面中存在進程,由於服務器負載問題,這可能不是一個可行的選項。

回答

5

「相同來源策略」涵蓋協議(「http」或「https」),主機名和端口號。所有這些都必須匹配或者你輸了。

如果您的服務器負載真的會因爲必須對頁面應用加密而受到影響,那麼我懷疑您還有其他更嚴重的問題。在這個時代,這真的不應該成爲一個問題。如果您的網站擁有大量流量,那麼您可能應該使用前端來完成SSL。

0

您無法通過JavaScript進行跨域/跨協議/跨端口訪問。這就是所謂的「跨域腳本」,這是一個問題,因爲沒有像這樣的安全性,我可以在iframe中打開GMail,獲得「u」和「p」文本框,並擁有用戶的登錄信息。

除了使用echo服務器之外,您在PS中放置的是唯一可以使用的真正解決方案......這可能會過度。

4

如果它是有史以來可能做你要求做的事情,沒有SSL保護的網站永遠不會安全。

讓我來描述這個問題。比方說,一個用戶,愛麗絲,去PayPal.com訪問她的帳戶。我,馬洛裏,介於貝寶和愛麗絲之間。當Alice訪問Paypal時,我攔截她的請求並返回一個包含兩件東西的頁面:一個框架爲https://paypal.com,另一個框架包含一個聲稱爲'http://my.paypal.com'的頁面,這是我自己製作的。 HTTPS框架驗證正確,因爲它實際上來自Paypal。 HTTP框架包含我的設備的一些Javascript,它將進入HTTPS框架,當Alice輸入密碼時,它會發送給我!

因此,不要從不安全的內容中訪問安全內容,即使在同一個域中也是不行的。

+0

您的示例不起作用:因爲_whole_域(包含所有現有和不存在的子域)屬於paypal,所以無法使用域「my.paypal.com」。所以我認爲這不是這個安全限制的原因。原因是一樣的,就好像你想在https站點上通過http加載任何內容一樣。 – rudi 2012-11-05 18:10:15

+1

@魯道夫我不認爲你完全明白我說的話。攻擊者返回一個包含兩個*幀*的頁面。一個框架包含真正的https://paypal.com。另一個包含惡意的JavaScript。惡意JavaScript「是從paypal.com發送的」 - 但實際上,我攔截了請求並返回了我想要的任何內容(可能是因爲它不是安全的連接)。因此,兩個框架「通過同源檢查」,但結果是災難。 – Borealid 2012-11-05 20:25:24

相關問題