[研究]黑箱 Web弱點掃描報告【不安全的第三方鏈結 (target="_blank")】弱點(一)
2025-06-25
HCL AppScan 10.8報告
不安全的第三方鏈結 (target="_blank")
嚴重性: 中
CVSS 評分: 5.3
CVSS 向量: AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N/E:X/RL:X/RC:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X
風險: 有可能說服無經驗而易受騙的使用者提供機密性資訊,如:使用者名稱、密碼、信用卡號碼、社會保險號碼等等
原因: 以 target=_blank 鏈結所鏈結到的頁面可以透過 window.opener 物件部分存取鏈結頁面視窗物件
修正: 將屬性 rel = "noopener noreferrer" 新增至 target="_blank" 的每一個鏈結元素
請問 rel = "noopener noreferrer" 的意義 ? 為何可以解決 "不安全的第三方鏈結 (target="_blank")" 問題 ?
********************************************************************************
ChatGPT 說:
一、rel="noopener noreferrer" 的意義
1.noopener:- 禁止新開的分頁透過 window.opener 存取開啟它的原始頁面(即父頁面)的 window 物件。
- 防止 Reverse Tabnabbing 攻擊。
- 禁止瀏覽器在點擊鏈結時,將 HTTP Referer 標頭傳送給目標網站,避免洩漏來源頁面的網址資訊。
- 同時也隱含 noopener 效果(現代瀏覽器中)。
二、target="_blank" 的安全問題來源
- target="_blank" 會在新分頁或新視窗打開鏈結。
- 如果沒有搭配 rel="noopener":
- 新開的頁面可以透過 window.opener 取得原本頁面的控制權。
- 惡意站點可能透過 window.opener.location = 'http://phishing-site.com' 導致原頁面跳轉到釣魚或惡意網站。
- 攻擊方式稱為 Reverse Tabnabbing。
三、為何 rel="noopener noreferrer" 可以解決?
- noopener 讓新頁面無法透過 window.opener 操控原頁面,避免原頁面被重定向或注入惡意腳本。
- noreferrer 進一步防止來源資訊洩漏,增加隱私性。
四、實際範例
不安全寫法:
<a href="https://example.com" target="_blank">外部連結</a>
安全寫法:
<a href="https://example.com" target="_blank" rel="noopener noreferrer">外部連結</a>
五、補充說明
- 現代瀏覽器多已預設部分阻擋 window.opener,但為相容舊版瀏覽器或確保萬無一失,仍建議主動加入 rel="noopener noreferrer"。
- 若只是連結到本站內部頁面,此問題較低,但對外部(不受信任)鏈結,強烈建議加上。
六、結論
rel="noopener noreferrer" 是解決 target="_blank" 安全隱患的標準做法,能有效防範:
- ✔ 釣魚攻擊
- ✔ 反向分頁劫持(Reverse Tabnabbing)
- ✔ 敏感資訊洩漏(Referer)
實務建議:
只要有 target="_blank",一律搭配 rel="noopener noreferrer",尤其是鏈結到外部網站。
(完)

沒有留言:
張貼留言