跳到主要內容

網頁連結的 target = _blank 的隱藏風險

這是偶然間看到的一篇文章
The Hidden Dangers You Have Never Noticed: target = "_blank" and "opener"
並進而找到討論這篇文章的 reddit 討論串

我一開始以為是英文閱讀,所以讓我沒有完全了解原文的感覺
不過看了 reddit 串也是很多人覺得作者的表達能力不好 XD
所以我覺得直接看 reddit 串中的其他人的討論跟摘要會更直接
簡單來說,可能導致的風險是讓使用者導入到偽造的釣魚網站

因為瀏覽器的跨網域保護政策
所以連結網頁中的 window.opener 只有受限的操作權力
目前的主流瀏覽器已經在這方面提供夠好的保護力
只不過在這有限的操作範圍中, opener 可以調用 location object 並操作
惡意的連結網頁藉此把原網頁跳轉到相似度極高的惡意釣魚網站
使用者關掉連結網頁後,很有可能沒注意到他回頭看的已經不是原本網頁而受害

所以如果開發者允許用戶用 target = _blank  的方式到外部連結
最好得加上防範措施免得夜長夢多
原文跟 reddit 串有不少考量的理由的說明,以下直接講建議方式

<a href="https://an.evil.site" target="_blank" rel="noopener noreferrer nofollow">...

如果要用 JavaScript 開啟的話則是
var newTab = window.open();
newTab.opener = null;
newTab.location = url;

留言