跨來源目的地的連結不安全

使用 target="_blank" 屬性連結至其他網站上的網頁時,可能會導致網站出現效能和安全性問題:

  • 其他網頁可能與您的網頁在同一個程序中執行。 如果其他網頁執行大量 JavaScript,您的網頁效能可能會受到影響。
  • 另一個網頁可透過 window.opener 屬性存取 window 物件。 這可能會導致其他網頁將您的網頁重新導向至惡意網址。

target="_blank" 連結中加入 rel="noopener"rel="noreferrer",即可避免這些問題。

Lighthouse 跨來源目的地稽核失敗的原因

Lighthouse 會標記連往跨原始來源目的地的不安全連結:

Lighthouse 稽核,顯示連往跨來源目的地的非安全連結。

Lighthouse 會透過下列程序,將連結識別為不安全:

  1. 收集所有包含 target="_blank" 屬性,但不包含 rel="noopener"rel="noreferrer" 屬性的 <a> 標記。
  2. 篩除任何相同主機的連結。

由於 Lighthouse 會篩除相同主機的連結,因此在處理大型網站時,請留意以下特殊情況。如果一個網頁包含指向網站上其他網頁的 target="_blank" 連結,但未使用 rel="noopener",這項稽核的效能影響仍適用。不過,您不會在 Lighthouse 結果中看到這些連結。

提升網站效能並防範安全漏洞

在 Lighthouse 報表中的每個連結中加入 rel="noopener"rel="noreferrer"。一般來說,使用 target="_blank" 時,請務必新增 rel="noopener"rel="noreferrer"

<a href="https://examplepetstore.com" target="_blank" rel="noopener">
  Example Pet Store
</a>
  • rel="noopener" 可防止新網頁存取 window.opener 屬性,並確保新網頁在獨立程序中執行。
  • rel="noreferrer" 的效果相同,也會防止 Referer 標頭傳送至新網頁。

詳情請參閱「安全地共用跨來源資源」。

資源