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