2025年6月25日 星期三

[研究]黑箱 Web弱點掃描報告【不安全的第三方鏈結 (target="_blank")】弱點(一)

[研究]黑箱 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 攻擊。
2.noreferrer

  • 禁止瀏覽器在點擊鏈結時,將 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",尤其是鏈結到外部網站。


(完)

沒有留言:

張貼留言