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