問題描述

為什麼 iframe 被認為是危險的,有安全隱患?有人可以描述可以惡意使用的情況嗎?

最佳解決方案

一旦您顯示來自其他域的內容,您基本上信任該域名不是 serve-up 惡意軟體。

iframe 本身沒有任何問題。如果你控制 iframe 的內容,它們是完全安全的。

次佳解決方案

如果您的站點嵌入在敵對站點上的 IFRAME 內,則 IFRAME 元素可能會面臨安全隱患。 Google “clickjacking” 瞭解更多詳情。請注意,如果您使用<iframe> 並不重要。唯一真正的防範這種攻擊是新增 HTTP 頭 X-Frame-Options: DENY,並希望瀏覽器知道它的工作。

此外,如果您的站點上的任何頁面包含可以利用的 XSS 漏洞,則 IFRAME 元素可能是安全風險。在這種情況下,攻擊者可以將 XSS 攻擊擴充套件到同一域內的任何頁面,該頁面可以被說服在具有 XSS 漏洞的頁面上的<iframe> 中載入。這是因為允許來自相同來源 (同一域) 的內容訪問父內容 DOM(實際上在”host” 檔案中執行 JavaScript) 。來自此攻擊的唯一真正的保護方法是新增 HTTP 頭 X-Frame-Options: DENY 和/或始終正確編碼所有使用者提交的資料 (即,您的站點上永遠不會有 XSS 漏洞 – 更容易說完成) 。

這是問題的技術方面。另外還有使用者介面的問題。如果你教你的使用者信任 URL 連結應該不會改變,當他們點選連結 (例如,你的網站使用一個大的 iframe 與所有的實際內容),那麼使用者將來不會注意到在任何情況下,在實際的安全漏洞。例如,您的站點中可能會出現 XSS 漏洞,從而允許攻擊者從您的 iframe 中的惡意源中載入內容。沒有人可以告訴區別,因為 URL 欄仍然與以前的行為 (從不更改) 相同,並且內容”looks” 有效,即使它來自惡意域請求使用者憑據。

如果有人聲稱在您的站點上使用<iframe> 元素是危險的並且導致安全風險,他不明白<iframe> 元素是什麼,或者他在談論<iframe> 相關漏洞在瀏覽器中的可能性。 <iframe src="..."> 標籤的安全性等於<img src="..."<a href="...">,只要瀏覽器中沒有漏洞。如果有一個合適的漏洞,即使沒有使用<iframe><img><a> 元素,也可能觸發它,所以不值得考慮這個問題。

但是,請注意,預設情況下,<iframe> 的內容可以啟動頂級導航。也就是說,允許<iframe> 中的內容自動開啟當前頁面位置的連結 (新位置將在位址列中顯示) 。避免這種情況的唯一方法是新增沒有值 allow-top-navigationsandbox 屬性。例如,<iframe sandbox="allow-forms allow-scripts" ...> 。不幸的是,沙箱還會停用所有的外掛。例如,Youtube 內容不能被沙盒,因為 Flash 播放器仍然需要檢視所有的 YouTube 內容。沒有瀏覽器支援使用外掛,同時禁止頂級導航。

第三種解決方案

我假設 cross-domain iFrame,因為如果你自己控制的話,風險會降低。

  • 如果您的網站被包含為 iframe,則劫持是一個問題

  • 受損的 iFrame 可能會顯示惡意內容 (假設 iFrame 顯示登入框而不是廣告)

  • 包括的 iframe 可以使某些 JS 呼叫,如警報和提示,可能會讓您的使用者煩惱

  • 包含的 iframe 可以透過 location.href 重定向 (yikes,想象一個 3p 框架將客戶從 bankofamerica.com 重定向到 bankofamerica.fake.com)

  • 3p 框內的惡意軟體 (java /flash /activeX) 可能會感染您的使用者

第四種方案

“Dangerous” 和”Security risk” 不是人們提到 iframe 時首先想到的東西,但它們可以用於 clickjacking 攻擊。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇