Security: rel=“noreferrer noopener nofollow”
源碼掃描時被要求 <a target=”_blank” />
標籤要加上 rel=”noopener noreferrer”
,先簡單總結加上這兩個屬性值的安全性考量:
noreferrer
可避免目的地網頁送出請求時,所送出請求的標頭帶上Referer讓目的端辨識來源端是從哪裡來,有關Referer標頭衍生的安全問題可參考MDN;noopener
可避免目的地網頁使用window.opener
取得來源地原始網頁內容並變更,此類型攻擊稱為 ”tabnapping”,例如目的地網頁可以用window.opener
再把你導向其他網頁。
不過這些屬性值其實有它的作用存在,例如可用來caching、流量分析等,接下來稍微探討noreferrer
、noopener
以及常被一起討論的nofollow
三者的作用和優缺點:
noreferrer
如上所述,noreferrer
用來避免送出的請求標頭帶上Refer。未使用noreferrer
的情況下,被請求端可針對來源端標頭的Referrer資訊作分析,例如了解網站的引薦流量;但如果加上此屬性值,這些引薦流量就會被視為”直接流量”而無法得知哪些流量是從哪些入口輾轉而來。
noopener
開啟外部連結的時候,來源端的內容可被開啟的目的地網頁程式碼透過window.opener
去存取或跳轉至其他頁面。要注意的是,某些版本瀏覽器未支援<a target=”_blank” />
預設加入等同rel=”noopener”
的行為,所以建議還是加上此屬性值。
nofollow
增加nofollow
會取消原始網站與所連結的外部網站的關聯。此屬性值只會影響外部網站的SEO,因為搜尋引擎會藉由網站之間的連結計算網站排名,如果愈多高知名度網站連結到某一網站,則該網站的排名可能就會愈高,所以可在外部連結加上nofollow
避免替別的網站”背書”。
References