開放式 Web 應用程式安全性專案維護著最緊迫的 Web 應用程式安全問題的清單並定期更新。
閱讀本文後,您將能夠:
複製文章連結
開放式 Web 應用程式安全性專案 (OWASP) 是致力於 Web 應用程式安全性的國際非營利組織。OWASP 的核心原則之一是,他們的所有資料都免費提供並且可以在其網站上輕鬆存取,這使得任何人都能夠改善自己的 Web 應用程式安全性。他們提供的材料包括文件、工具、影片和論壇。也許他們最著名的專案是 OWASP Top 10。
OWASP Top 10 是定期更新的報告,概述了 Web 應用程式安全性的安全問題,重點關注 10 個最關鍵的風險。該報告由來自世界各地的安全專家小組匯總而成。OWASP 將 Top 10 稱為「意識文件」,他們建議所有公司將該報告納入流程中,以最大程度地減少和/或防護安全風險。
以下是《2017 年 OWASP Top 10 報告》中報告的安全風險:
當不被信任的資料透過表單輸入或其他一些提交到 Web 應用程式的資料傳送到代碼解譯器時,就會發生資料隱碼攻擊。例如,攻擊者可能向本應填寫純文字使用者名稱的表單輸入 SQL 資料庫代碼。如果該表單輸入未得到正確保護,則將導致執行該 SQL 代碼。這稱為 SQL 資料隱碼攻擊。
可以透過驗證和/或清除使用者提交的資料來防止資料隱碼攻擊。(驗證意味著拒絕看似可疑的資料,清理指清除資料中可疑的部分。)此外,資料庫管理員可以設定控制項以最大程度地減少資料隱碼攻擊可能接觸的資訊量。
進一步瞭解如何防止 SQL 資料隱碼攻擊。
攻擊者可以透過驗證(登入)系統中的漏洞存取使用者帳戶,甚至可以使用管理員帳戶來入侵整個系統。例如,攻擊者可以獲取一個包含在資料外洩中獲得的數千個已知使用者名稱/密碼組合的清單,並使用指令碼在登入系統上嘗試所有這些組合,以查看是否有任何有效的組合。
緩解驗證漏洞的策略包括要求雙重驗證 (2FA) 以及使用限速限制或延遲重複的登入嘗試。
如果 Web 應用程式不保護財務資訊和密碼等敏感性資料,則攻擊者可以存取這些資料並將其用於惡意目的。竊取敏感性資料的一種常見方法是使用中間人攻擊。
透過加密所有敏感性資料並停用任何敏感性資訊的快取*,可以最大程度地降低資料暴露風險。此外,Web 應用程式開發人員應小心謹慎,確保避免不必要地儲存任何敏感性資料。
*快取是一種臨時儲存資料以供重複使用的做法。例如,網路瀏覽器通常會快取網頁,這樣,如果使用者在特定時間段內重新造訪這些頁面,瀏覽器就不必從 Web 擷取頁面。
這是對剖析 XML* 輸入的 Web 應用程式的攻擊。此輸入可以參照外部實體,以嘗試利用剖析器中的漏洞。在此處,「外部實體」是指儲存單位,例如硬碟。攻擊可以誘使 XML 剖析器將資料傳送到未經授權的外部實體,然後後者可以將敏感性資料直接傳遞給攻擊者。
防止 XEE 攻擊的最佳方法是讓 Web 應用程式接受不太複雜的資料類型,例如 JSON**,或者至少修補 XML 剖析器並禁止在 XML 應用程式中使用外部實體。
*XML 全稱可延伸標記語言,是一種旨在同時實現人類可讀和機器可讀的標記語言。由於其複雜性和安全性漏洞,許多 Web 應用程式現在已經逐步淘汰了這種語言。
**JavaScript 物件標記法 (JSON) 是一種簡單的、人類可讀的標記法,通常用於透過網際網路傳輸資料。儘管 JSON 最初是為 JavaScript 建立的,但它不受語言限制,並且可以由許多不同的程式設計語言解譯。
存取控制是指控制對資訊或功能的存取權限的系統。失效的存取控制使攻擊者可以繞過授權,並像管理員之類的特權使用者一樣執行任務。例如,Web 應用程式可能允許使用者僅透過變更 url 的一部分即可變更他們登入的帳戶,而無需任何其他驗證。
透過確保 Web 應用程式使用授權權杖*並對其設定嚴格的控制,可以確保存取控制的安全。
*許多服務在使用者登入時都會發佈授權權杖。使用者發出每個特權請求都需要出示授權權杖。這是確保使用者身分與所聲稱身分相符的安全方法,無需他們不斷輸入登入認證。
安全設定錯誤是清單上最常見的漏洞,通常是使用預設設定或顯示過多詳細錯誤的結果。例如,一個應用程式可能在向使用者顯示錯誤時描述得過於詳盡,以致於揭示出應用程式中的漏洞。可以透過移除代碼中任何未使用的功能並顯示更籠統的錯誤訊息,來緩解這一問題。
當 Web 應用程式允許使用者將自訂代碼新增到 url 路徑或其他使用者可以看到的網站上時,就會發生 Cross-site scripting 漏洞。利用此漏洞,可以在受害者的瀏覽器上執行惡意的 JavaScript 代碼。例如,攻擊者可以向受害者傳送看似來自受信任銀行的電子郵件,並隨附指向該銀行網站的連結。連結可能在 URL 的末尾標記了一些惡意 JavaScript 代碼。如果銀行的網站沒有針對 Cross-site scripting 進行適當防護,則當受害者點擊連結時,該惡意代碼將在受害者的 Web 瀏覽器中執行。
Cross-site scripting 的緩解策略包括不受信任的 HTTP 請求逸出以及驗證和/或清除使用者產生的內容。使用像 ReactJS 和 Ruby on Rails 這樣的現代 Web 開發框架,還可以提供一些內建的 Cross-site scripting 防護。
這種威脅的目標是各種經常對資料進行序列化和反序列化的 Web 應用程式。序列化意味著從應用程式碼中獲取物件,並將其轉換為可用於其他目的的格式,例如將資料儲存到磁碟或對其進行串流。反序列化則正好相反:將序列化的資料轉回為應用程式可以使用的物件。序列化就像在搬家之前將傢俱打包到箱子裡,而反序列化就像在搬家之後拆開箱子並組裝傢俱。不安全的反序列化攻擊就像搬家公司在拆箱之前篡改箱子中的物品。
不安全的反序列化漏洞利用是不可信來源的資料反序列化的結果,並可能導致嚴重的後果,例如 DDoS 攻擊和遠端代碼執行攻擊。儘管可以採取措施嘗試找出攻擊者,例如監視反序列化和實作類型檢查,但防止不安全反序列化攻擊的唯一肯定有效的方法是,禁止來自不受信任來源的資料反序列化。
許多現代 Web 開發人員在其 Web 應用程式中使用庫和框架之類的元件。這些元件是可協助開發人員避免多餘工作並提供所需功能的軟體;常見範例包括 React 等前端框架以及用於新增分享圖示或 A/B 測試的小型庫。一些攻擊者會在這些元件中尋找漏洞,然後利用這些漏洞來組織攻擊。一些較為熱門的元件在數十萬個網站上使用。攻擊者如在其中一個元件中發現安全性漏洞,就可能使數十萬個網站易受攻擊。
元件開發人員通常會提供安全修補程式和更新程式來修補已知漏洞,但 Web 應用程式開發人員並不總是在其應用程式上執行元件的已修補版本或最新版本。為了最大程度地降低執行具有已知漏洞的元件的風險,開發人員應從專案中移除未使用的元件,並確保他們從受信任的來源接收元件且元件是最新版本。
許多 Web 應用程式沒有採取足夠的措施來偵測資料外洩。漏洞發生後,平均發現時間約為 200 天。這使攻擊者有大量時間在開發人員沒有任何回應之前造成破壞。OWASP 建議 Web 開發人員實作記錄和監控以及事件回應計畫,以確保他們瞭解應用程式遭到的攻擊。
有關 OWASP Top 10 的更多技術資訊和深入資訊,請參閱官方報告。
入門
關於 Web 應用程式安全性
常見威脅
VPN 資源
安全性字彙