問題描述
為什麼 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-navigation 的 sandbox 屬性。例如,<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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。