【转载】target='_blank' 安全漏洞示例
kayson
推薦新文章target='_blank' 安全漏洞示例
原文鏈接: dev.to更新: Instagram已經解決了這個問題, 很可能是因為這篇文章。Facebook和Twitter仍未解決。我用Instagram作為基本的例子,但主要結論是target="_blank"安全漏洞極為普遍。每個Web開發者應該警惕它,瀏覽器也應該考慮修改這個行為。
如果你在鏈接上使用 target="_blank"屬性,并且不加上rel="noopener"屬性,那么你就讓用戶暴露在一個非常簡單的釣魚攻擊之下。為了告知來自于不受保護的站點的用戶,我們運行一個利用了這個缺陷的腳本。
if (window.opener) {window.opener.location = "https://dev.to/phishing?referrer="+document.referrer; }我相信絕大多數站點都沒有恰當地處理這個問題,但令我意外的是Instagram.com 也是其中一個。我們最近剛好創建了 @ThePracticalDev Instagram賬號,然后就發現了這個問題。如果你在我們的資料頁點擊 dev.to 鏈接,然后回到原來的頁面,你就會明白我的意思。Twitter也沒有在Safari上防備這個安全漏洞,Chrome和Firefox也是。他們沒有用 rel="noopener",因此看起來他們用的安全腳本在Safari上并不起作用。
更新: 由于Instagram在這篇文章發表之后修復了這個問題,我把下面的例子改成了Facebook的頁面。
弄清原委
當站點在鏈接中使用target="_blank"來打開新頁卡或窗口時,該站點就通過window.opener API給了新頁面對原有窗口的訪問入口,并授予了一些權限。這其中的一些權限被跨域限制攔截了,但是window.location是漏網之魚。
別急,還有更多
這不僅存在釣魚攻擊的問題,還涉及到隱私問題,因為新打開的站點對原有頁卡的瀏覽地址有著持續的訪問權。它可以輪詢這個信息,并得到結果。幸虧這個行為看起來被跨域限制阻止了,因此即便我或許可以持續訪問你不想讓我知道的信息,完整的規范里應該包含健全的限制規則。
更新: 在我最開始寫這個的時候,我提出了一種瀏覽器間諜場景,該場景中不良分子可以更徹底地偵測用戶瀏覽歷史。現在我覺得那并不準確,因此我修改了表述。
為了限制 window.opener的訪問行為,原始頁面需要在每個使用了target="_blank"的鏈接中加上一個rel="noopener"屬性。然而,火狐不支持這個屬性值,所以實際上你要用 rel="noopener noreferrer"來完整覆蓋。盡管某些預防措施可以通過腳本實現,正如在Twitter上看到的,但這在Safari上并不起作用。
var otherWindow = window.open(); otherWindow.opener = null; otherWindow.location = url;這段建議腳本來自于關于該主題的一篇好文章.
這個問題并不知名,而且完全被低估了。它在Web Hypertext Application Technology Working Group郵件列表中被提出 在我看來,這個瀏覽器行為的風險遠大于潛在的好處。不管怎樣,Facebook和Instagram也沒有理由忽視這個問題。
未來我還會談論更多此類事情。 有興趣可以關注我的Twitter(@bendhalpern) 或 @ThePracticalDev。
臉書 瀏覽器 火狐 前端 程序員版權聲明
本譯文僅用于學習、研究和交流目的,歡迎非商業轉載。轉載請注明出處、譯者和眾成翻譯的完整鏈接。轉載于:https://www.cnblogs.com/InnerPeace-Hecdi/p/9428722.html
總結
以上是生活随笔為你收集整理的【转载】target='_blank' 安全漏洞示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow常用函数说明(一)
- 下一篇: 在linux或者windows上直观查看