點擊劫持(Clickjacking)是一種前端安全攻擊手段,攻擊者通過視覺欺騙誘導用戶在不知情的情況下點擊隱藏的頁面元素,從而執行非預期的操作。以下是攻擊過程的詳細說明:
攻擊過程步驟
-
攻擊者構造惡意頁面
-
創建一個惡意網頁,其中包含一個透明的?
<iframe>
,指向目標網站(如社交網絡、銀行頁面等)的敏感操作頁面(如“關注用戶”“確認轉賬”按鈕)。 -
示例代碼:
<iframe src="https://victim.com/transfer?amount=1000" style="opacity:0; position:absolute; top:0; left:0"></iframe>
-
-
誘騙用戶訪問惡意頁面
-
通過釣魚郵件、社交工程或惡意廣告鏈接,誘使用戶訪問該惡意頁面。
-
-
視覺欺騙布局
-
使用 CSS 將?
<iframe>
?覆蓋在用戶可見的“誘餌內容”上(如虛假按鈕、游戲界面)。通過調整?z-index
、opacity
?和?position
?使其透明且覆蓋在誘餌元素之上。 -
示例布局:
<!-- 誘餌內容:用戶看到的虛假按鈕 --> <button style="position:absolute; top:100px; left:100px">點擊抽獎!</button><!-- 隱藏的 iframe:覆蓋在虛假按鈕上 --> <iframe src="https://victim.com/confirm-transfer" style="opacity:0; position:absolute; top:100px; left:100px; width:200px; height:50px; z-index:999"> </iframe>
-
-
用戶觸發非預期操作
-
用戶點擊看似無害的“誘餌內容”(如“抽獎按鈕”),實際點擊的是透明?
<iframe>
?中的敏感操作按鈕(如“確認轉賬”)。
-
-
攻擊完成
-
目標網站收到用戶“合法”的請求(因用戶已登錄,攜帶了 Cookie 或身份憑證),執行攻擊者預設的操作(如轉賬、關注、修改設置等)。
-
具體攻擊場景示例
-
社交媒體關注劫持
-
透明 iframe 加載“關注用戶”頁面,覆蓋在虛假的“關閉廣告”按鈕上。用戶點擊“關閉”時實際關注了攻擊者的賬號。
-
-
銀行轉賬劫持
-
iframe 加載已填寫好的轉賬頁面,覆蓋在游戲界面的“開始游戲”按鈕上。用戶點擊后觸發轉賬操作。
-
-
權限提升攻擊
-
誘導用戶點擊隱藏的管理員操作界面(如“授予權限”按鈕),提升攻擊者賬戶權限。
-
防御手段
-
服務端防御
-
X-Frame-Options
?HTTP 頭:禁止頁面被嵌入 iframe。add_header X-Frame-Options "DENY"; # 或 "SAMEORIGIN"
-
Content Security Policy (CSP):通過?
frame-ancestors
?指令限制頁面嵌套來源。add_header Content-Security-Policy "frame-ancestors 'none';";
-
-
前端防御
-
JavaScript 反嵌套腳本:檢測頁面是否被嵌入,若是則跳轉或隱藏內容。
if (top !== self) top.location = self.location;
-
視覺干擾:通過 CSS 模糊、覆蓋層防止透明 iframe 生效(需結合其他方法)。
-
-
用戶側防御
-
使用瀏覽器插件(如 NoScript)禁止未經信任的腳本和 iframe。
-
總結
點擊劫持利用用戶對可見內容的信任,通過前端技術實現隱蔽操作。防御需結合服務端頭部設置、前端檢測和用戶安全意識,才能有效阻斷此類攻擊。