Secure Site

This site is protected from clickjacking attacks.

在此範例中,JavaScript 檢查目前視窗 (window.self) 是否不是最頂層視窗 (window.top)。如果不是,它會將最頂層的視窗重新導向到目前視窗的 URL,從而有效地突破 iframe。

2.使用事件偵聽器增強訊框清除
您可以透過使用事件偵聽器持續檢查頁面是否被框架來進一步增強框架破壞技術。

例子:

            Enhanced Frame Busting        

Secure Site

This site is protected from clickjacking attacks.

在此範例中,在 DOMContentLoaded、load 和 resize 事件上呼叫 PreventClickjacking 函數,以確保持續保護。

伺服器端保護

雖然 JavaScript 方法很有用,但實作伺服器端保護可以提供額外的安全層。以下是如何在 Apache 和 Nginx 中設定 HTTP 標頭以防止點擊劫持:

1. X-Frame-Options 標頭
X-Frame-Options 標頭可讓您指定您的網站是否可以嵌入 iframe 中。共有三個選項:

DENY:阻止任何網域嵌入您的頁面。
SAMEORIGIN:僅允許來自同一來源的嵌入。
ALLOW-FROM uri:允許從指定的 URI 嵌入。
例:

X-Frame-Options: DENY

Apache 設定
將此標頭新增至您的伺服器設定:

# ApacheHeader always set X-Frame-Options \\\"DENY\\\"

Nginx 設定
將此標頭新增至您的伺服器設定:

2.內容安全策略 (CSP) 框架祖先
CSP 透過frame-ancestors 指令提供了更靈活的方法,該指令指定可以使用 iframe 嵌入頁面的有效父級。

例子:

Content-Security-Policy: frame-ancestors \\'self\\'

Apache 設定
將此標頭新增至您的伺服器設定:

例子:

# ApacheHeader always set Content-Security-Policy \\\"frame-ancestors \\'self\\'\\\"

Nginx 設定
將此標頭新增至您的伺服器設定:

# Nginxadd_header Content-Security-Policy \\\"frame-ancestors \\'self\\'\\\";

結論

點擊劫持對Web 安全性構成嚴重威脅,但透過實施JavaScript 框架破壞技術和伺服器端保護(例如X-Frame-Options 和Content-Security-Policy 標頭),您可以有效地保護您的Web 應用程式。使用提供的範例來增強網站的安全性並為使用者提供更安全的體驗。

","image":"http://www.luping.net/uploads/20240801/172248708366ab112bdc1ec.jpg","datePublished":"2024-08-01T12:38:03+08:00","dateModified":"2024-08-01T12:38:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 防止 JavaScript 中的點擊劫持攻擊

防止 JavaScript 中的點擊劫持攻擊

發佈於2024-08-01
瀏覽:132

Preventing Clickjacking Attacks in JavaScript

點擊劫持,也稱為 UI 糾正,是一種攻擊類型,惡意行為者透過在 iframe 中嵌入網頁來誘騙用戶點擊與他們感知的內容不同的內容。這可能會導致未經授權的操作並危及用戶安全。在本部落格中,我們將探討如何使用 JavaScript 和 Apache 和 Nginx 的伺服器配置以及使用者友好的範例來防止點擊劫持攻擊。

了解點擊劫持

點擊劫持涉及在合法網頁元素上放置透明或不透明的 iframe,導致用戶在不知不覺中執行更改設定或轉移資金等操作。

現實世界的例子

考慮這樣一種情況:攻擊者將銀行網站的隱藏 iframe 嵌入到受信任的網頁中。當用戶點擊看似無害的按鈕時,他們實際上可能正在授權銀行交易。

以下是易受攻擊頁面的範例:



    Clickjacking Example

Welcome to Our Site

使用 JavaScript 防止點擊劫持

為了防止點擊劫持攻擊,您可以使用 JavaScript 來確保您的網站不會被陷害。以下是有關如何實施此保護的分步指南:

1. JavaScript 架構破壞
框架破壞涉及使用 JavaScript 來偵測您的網站是否在 iframe 內載入並突破它。

例子:



    Frame Busting Example

Secure Site

This site is protected from clickjacking attacks.

在此範例中,JavaScript 檢查目前視窗 (window.self) 是否不是最頂層視窗 (window.top)。如果不是,它會將最頂層的視窗重新導向到目前視窗的 URL,從而有效地突破 iframe。

2.使用事件偵聽器增強訊框清除
您可以透過使用事件偵聽器持續檢查頁面是否被框架來進一步增強框架破壞技術。

例子:



    Enhanced Frame Busting

Secure Site

This site is protected from clickjacking attacks.

在此範例中,在 DOMContentLoaded、load 和 resize 事件上呼叫 PreventClickjacking 函數,以確保持續保護。

伺服器端保護

雖然 JavaScript 方法很有用,但實作伺服器端保護可以提供額外的安全層。以下是如何在 Apache 和 Nginx 中設定 HTTP 標頭以防止點擊劫持:

1. X-Frame-Options 標頭
X-Frame-Options 標頭可讓您指定您的網站是否可以嵌入 iframe 中。共有三個選項:

DENY:阻止任何網域嵌入您的頁面。
SAMEORIGIN:僅允許來自同一來源的嵌入。
ALLOW-FROM uri:允許從指定的 URI 嵌入。
例:

X-Frame-Options: DENY

Apache 設定
將此標頭新增至您的伺服器設定:

# Apache
Header always set X-Frame-Options "DENY"

Nginx 設定
將此標頭新增至您的伺服器設定:

2.內容安全策略 (CSP) 框架祖先
CSP 透過frame-ancestors 指令提供了更靈活的方法,該指令指定可以使用 iframe 嵌入頁面的有效父級。

例子:

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

Apache 設定
將此標頭新增至您的伺服器設定:

例子:

# Apache
Header always set Content-Security-Policy "frame-ancestors 'self'"

Nginx 設定
將此標頭新增至您的伺服器設定:

# Nginx
add_header Content-Security-Policy "frame-ancestors 'self'";

結論

點擊劫持對Web 安全性構成嚴重威脅,但透過實施JavaScript 框架破壞技術和伺服器端保護(例如X-Frame-Options 和Content-Security-Policy 標頭),您可以有效地保護您的Web 應用程式。使用提供的範例來增強網站的安全性並為使用者提供更安全的體驗。

版本聲明 本文轉載於:https://dev.to/rigalpatel001/preventing-clickjacking-attacks-in-javascript-39pj?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 破解編碼面試的熱門必備書籍(從初級到高級排名)
    破解編碼面試的熱門必備書籍(從初級到高級排名)
    准备编码面试可能是一个充满挑战的旅程,但拥有正确的资源可以让一切变得不同。无论您是从算法开始的初学者、专注于系统设计的中级开发人员,还是完善编码实践的高级工程师,这份按难度排名的前 10 本书列表都将为您提供成功所需的知识和技能。你的软件工程面试。这些书籍涵盖了从基本算法到系统设计和简洁编码原则的所...
    程式設計 發佈於2024-11-06
  • Java 字串實習初學者指南
    Java 字串實習初學者指南
    Java String Interning 引入了透過在共享池中儲存唯一字串來優化記憶體的概念,減少重複物件。它解釋了 Java 如何自動實習字串文字以及開發人員如何使用 intern() 方法手動將字串新增至池中。 透過掌握字串駐留,您可以提高 Java 應用程式的效能和記憶體效率。要深入了解...
    程式設計 發佈於2024-11-06
  • 如何在 GUI 應用程式中的不同頁面之間共用變數資料?
    如何在 GUI 應用程式中的不同頁面之間共用變數資料?
    如何從類別中取得變數資料在 GUI 程式設計環境中,單一應用程式視窗中包含多個頁面是很常見的。每個頁面可能包含各種小部件,例如輸入欄位、按鈕或標籤。當與這些小部件互動時,使用者提供輸入或做出需要在不同頁面之間共享的選擇。這就提出瞭如何從一個類別存取另一個類別的變數資料的問題,特別是當這些類別代表不同...
    程式設計 發佈於2024-11-06
  • React 中的動態路由
    React 中的動態路由
    React 中的動態路由可讓您基於動態資料或參數建立路由,從而在應用程式中實現更靈活、更強大的導航。這對於需要根據使用者輸入或其他動態因素呈現不同元件的應用程式特別有用。 使用 React Router 設定動態路由 您通常會使用react-router-dom程式庫在React中實作動態路由。這...
    程式設計 發佈於2024-11-06
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-06
  • WPF中延遲操作時如何避免UI凍結?
    WPF中延遲操作時如何避免UI凍結?
    WPF 中的延遲操作WPF 中的延遲操作對於增強用戶體驗和確保平滑過渡至關重要。常見的情況是在導航到新視窗之前添加延遲。 為了實現此目的,經常使用 Thread.Sleep,如提供的程式碼片段所示。但是,在延遲過程中,使用 Thread.Sleep 阻塞 UI 執行緒會導致 UI 無回應。這表現為在...
    程式設計 發佈於2024-11-06
  • 利用 Java 進行即時資料流和處理
    利用 Java 進行即時資料流和處理
    In today's data-driven world, the ability to process and analyze data in real-time is crucial for businesses to make informed decisions swiftly. Java...
    程式設計 發佈於2024-11-06
  • 如何修復損壞的 InnoDB 表?
    如何修復損壞的 InnoDB 表?
    從 InnoDB 表損壞中恢復災難性事件可能會導致資料庫表嚴重損壞,特別是 InnoDB 表。遇到這種情況時,了解可用的修復選項就變得至關重要。 InnoDB Table Corruption Symptoms查詢中所述的症狀,包括交易日誌中的時間戳錯誤InnoDB 表的修復策略雖然已經有修復MyI...
    程式設計 發佈於2024-11-06
  • JavaScript 陣列和物件中是否正式允許使用尾隨逗號?
    JavaScript 陣列和物件中是否正式允許使用尾隨逗號?
    陣列與物件中的尾隨逗號:標準還是容忍? 數組和物件中尾隨逗號的存在引發了一些關於它們的爭論JavaScript 的標準化。這個問題源自於在不同瀏覽器中觀察到的不一致行為,特別是舊版的 Internet Explorer。 規範狀態規範狀態ObjectLiteral : { } { P...
    程式設計 發佈於2024-11-06
  • 最佳引導模板產生器
    最佳引導模板產生器
    在當今快速發展的數位環境中,速度和效率是關鍵,網頁設計師和開發人員越來越依賴 Bootstrap 建構器來簡化他們的工作流程。這些工具可以快速創建響應靈敏、具有視覺吸引力的網站,使團隊能夠比以往更快地將他們的想法變為現實。 Bootstrap 建構器真正改變了網站的建構方式,使過程更加易於存取和高...
    程式設計 發佈於2024-11-06
  • 簡化 NestJS 中的檔案上傳:無需磁碟儲存即可高效能記憶體中解析 CSV 和 XLSX
    簡化 NestJS 中的檔案上傳:無需磁碟儲存即可高效能記憶體中解析 CSV 和 XLSX
    Effortless File Parsing in NestJS: Manage CSV and XLSX Uploads in Memory for Speed, Security, and Scalability Introduction Handling file uploa...
    程式設計 發佈於2024-11-06
  • 使用 SubDomainRadar.io 和 Python 輕鬆發現隱藏子網域
    使用 SubDomainRadar.io 和 Python 輕鬆發現隱藏子網域
    作為網路安全專業人員、漏洞賞金獵人或滲透測試人員,發現隱藏的子域對於識別至關重要域中的潛在漏洞。子網域通常託管可能容易受到攻擊的被遺忘的服務或測試環境。 在這篇文章中,我將向您介紹SubDomainRadar.io 及其Python API 包裝器 — 自動化子域枚舉的終極工具和安全工作流程中的反...
    程式設計 發佈於2024-11-06
  • Python 中的 HackerRank 問題 - 基本資料類型列表
    Python 中的 HackerRank 問題 - 基本資料類型列表
    此 Python 程式碼旨在根據使用者提供的命令對清單執行一系列操作。讓我們一步步分析程式碼,了解其工作原理: if __name__ == '__main__': N = int(input()) l = [] while(N>0): cmd_l = ...
    程式設計 發佈於2024-11-06
  • ust-Know 進階 Tailwind CSS 實用程式可增強開發體驗
    ust-Know 進階 Tailwind CSS 實用程式可增強開發體驗
    Tailwind CSS 以其實用性優先的方法而聞名,使開發人員能夠直接在 HTML 中創建高度可自訂的設計。除了基礎知識之外,掌握進階實用程式還可以顯著增強您的開發工作流程,使其更快、更有效率。在這裡,我們將探索每個開發人員都應該知道的六個高級 Tailwind CSS 實用程序,並透過並排程式碼...
    程式設計 發佈於2024-11-06
  • Qt Signals 中的 DirectConnection 與 QueuedConnection:何時該選擇哪一個?
    Qt Signals 中的 DirectConnection 與 QueuedConnection:何時該選擇哪一個?
    Qt 訊號:深入研究 DirectConnection 和 QueuedConnectionQt 訊號在 Qt 應用程式中元件之間的通訊中發揮著至關重要的作用。然而,選擇 DirectConnection 和 QueuedConnection 作為連線方法可能會產生重大影響,尤其是在處理多執行緒應用...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3