使用 XFO 或 CSP 降低點擊劫持風險

點擊劫持是一種惡意攻擊,會誘騙使用者點選看似可信且熟悉網站上的連結或 UI 元素。這通常是透過使用 <iframe>,將信任網站的部分或全部內容嵌入惡意網站中來達成。

X-Frame-Options (XFO) 標頭Content-Security-Policy (CSP) 標頭中的 frame-ancestors 指令可控制網站在 <iframe> 中嵌入的方式,進而減輕點按盜用攻擊。

Lighthouse 稽核失敗的原因

如果 XFO 標頭設為 SAMEORIGINDENY,或是 CSP 標頭設為 frame-ancestors 指令,稽核就會通過。如果未設定這兩項影格控制政策,稽核作業就會失敗。

Lighthouse 報表警告指出,系統未發現任何 CSP 或 XFO 回應標頭,無法減輕點擊劫持問題。
Lighthouse 報告警告指出,系統未發現任何 CSP 或 XFO 回應標頭,無法減輕點擊劫持問題。

如何設定訊框控管政策來減輕點擊劫持問題

您必須在初始文件要求的 HTTP 標頭上設定框架控制政策。如果在 <meta> 元素上設定 X-Frame-Options 標頭和 frame-ancestors 指令,則無法運作。Content-Security-Policy

XFO 標頭

將 XFO 標頭設為 DENYSAMEORIGIN,可減輕點擊劫持攻擊:

X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY

只有在所有祖系框架與網頁本身共用相同來源時,SAMEORIGIN 指令才會允許顯示網頁。相反地,DENY 指令會禁止頁面在頁框中顯示,不論父項頁框來源為何。

CSP 標頭

CSP 標頭中的 frame-ancestors 指令會定義哪些網站可以在 <frame><iframe><object><embed> 中嵌入指定網頁。與 XFO 類似,CSP frame-ancestors 指令可用於將其設為 selfnone,藉此減輕點閱綁架攻擊:

Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';

不過,frame-ancestors 指令比 XFO 更具彈性,因為它可以設定可能會嵌入網頁的特定父項來源:

Content-Security-Policy: frame-ancestors 'self' https://example.com;

資源