點擊劫持是一種惡意攻擊,會誘騙使用者點選看似可信且熟悉網站上的連結或 UI 元素。這通常是透過使用 <iframe>
,將信任網站的部分或全部內容嵌入惡意網站中來達成。
X-Frame-Options
(XFO) 標頭和 Content-Security-Policy
(CSP) 標頭中的 frame-ancestors
指令可控制網站在 <iframe>
中嵌入的方式,進而減輕點按盜用攻擊。
Lighthouse 稽核失敗的原因
如果 XFO 標頭設為 SAMEORIGIN
或 DENY
,或是 CSP 標頭設為 frame-ancestors
指令,稽核就會通過。如果未設定這兩項影格控制政策,稽核作業就會失敗。
如何設定訊框控管政策來減輕點擊劫持問題
您必須在初始文件要求的 HTTP 標頭上設定框架控制政策。如果在 <meta>
元素上設定 X-Frame-Options
標頭和 frame-ancestors
指令,則無法運作。Content-Security-Policy
XFO 標頭
將 XFO 標頭設為 DENY
或 SAMEORIGIN
,可減輕點擊劫持攻擊:
X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY
只有在所有祖系框架與網頁本身共用相同來源時,SAMEORIGIN
指令才會允許顯示網頁。相反地,DENY
指令會禁止頁面在頁框中顯示,不論父項頁框來源為何。
CSP 標頭
CSP 標頭中的 frame-ancestors
指令會定義哪些網站可以在 <frame>
、<iframe>
、<object>
或 <embed>
中嵌入指定網頁。與 XFO 類似,CSP frame-ancestors
指令可用於將其設為 self
或 none
,藉此減輕點閱綁架攻擊:
Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';
不過,frame-ancestors
指令比 XFO 更具彈性,因為它可以設定可能會嵌入網頁的特定父項來源:
Content-Security-Policy: frame-ancestors 'self' https://example.com;