OWASP 10 大 Web 安全問題在 JEE 體系完全失控
雖然,JavaEE 內建了一些非常優秀的安全機制,但是它不能全面應對應用程式面臨的各種威脅,尤其許多最常見的攻擊:跨站攻擊(XSS),SQL 注入,Cross-Site Request Forgery (CSRF), 與 XML eXternal Entities (XXE) 等。如果你不對系統做大量的安全測試、漏洞修補以及購買應用級安全防護工具,應用程式就完全暴露在這些攻擊之下。
幸運的是,開源 Web 應用安全組織(OWASP)已經將這下面10個 Web 問題列為最重要的安全攻擊,詳情請參見:「Ten Most Critical Web Application Security Risks」 報告。 希望引起大家這些安全問題的足夠重視。
下面就詳細解釋一下這些最著名的安全攻擊在 JavaEE 的 Web 應用程式和 Web 服務上是如何工作的:
1、注入攻擊
在編寫程式時,任何可疑的資訊輸入都可能是注入攻擊,比如 request.getParameter(), request.getCookie() 以及request.getHeader(),甚至在使用者命令列介面也存在注入風險。如果開發人員以資料和 SQL 命令拼接的方式形成 SQL 語句就存在 SQL 注入風險,比如: “SELECT * FROM users WHERE username=‘“ + request.getParameter(“user”) + “‘ AND password=‘“ + request.getParameter(“pass”) = “‘“; 開發者正確的寫法應該是用 PreparedStatement 方式避免黑客有機會改變 SQL 語句的原意進而控制資料庫。除了 SQL 注入還有很多注入攻擊的方式,包括:Command Injection, LDAP Injection, 與 Expression Language (EL) Injection,所有的這些注入都非常非常危險,在編寫接受資料的模組時一定要非常非常小心。
2、失效的身份和回話管理
JavaEE 對身份校驗和會話管理都能夠支援,但是安全方面做得很不夠,有很多種方法可以破壞。程式設計師不得不確保每個身份校驗都通過 SSL 安全通道,並且還要確保沒有異常發生。如果不幸暴露了一個 JSESSIONID,黑客只要掌握了該 JSESSIONID 就可以劫持會話,很多時候為了防止會話固定攻擊還不得不對 JSESSIONID 進行混淆。使用 response.encodeURL() 將 JSESSIONID 加到 URL 裡面是非常危險的,JSESSIONID 很容易被偷竊,這種行為一定要避免。
3、Cross-Site Scripting (XSS)
若應用程式收到不可信的資料,在沒有進行適當的驗證和轉義的情況下,就將它傳送給一個網頁瀏覽器,就會產生跨站指令碼攻擊(簡稱 XSS)。XSS 允許攻擊者在受害者的瀏覽器上執行指令碼,從而劫持使用者會話、危害網站、或者將使用者轉向惡意網站。
4、不安全的直接物件引用
當開發人員暴露一個對內部實現物件的引用時,例如,一個檔案、目錄或者資料庫密匙,就會產生一個不安全的直接物件引用。在沒有訪問控制檢測或其他保護時,攻擊者會操控這些引用去訪問未授權資料。
5、安全配置錯誤
現代 JavaEE 應用程式和框架如 Struts,Spring 都有很多的安全配置,當使用這些框架一定要確保這些配置是正確的。比如在開發 Web 應用程式時一定要當心 裡的 標籤,該標籤的意思是 security-constraint 只作用於標籤裡面列出的方法,黑客可以利用這個使用列表以外的方法如:HEAD 和 PUT 進行攻擊,從而越過安全限制。大多數情況下開發者應該刪掉 web.xml 裡面的 標籤。
6、敏感資訊洩露
Java 使用擴充套件庫的方式實現加解密,Java 提供通用的介面,任何使用者,只需要簡單的配置,都可以根據介面來實現加密,這樣的好處是擴充套件性很強,弊端是如何正確使用密碼庫是非常不容易事情:第一步,找一個基於 JCE 的頂級加密庫,提供簡單、安全的加密方法,Jasypt 與 ESAPI 就非常不錯。第二步,應該使用強加密演算法如:加密用 AES,雜湊用 SHA256,像密碼這種敏感資訊,廣雜湊是不夠的,黑客可以通過 Rainbow 表來破譯,因此需使用自適應安全演算法如 bcrypt 或 PBKDF2。任何使用不當都可能造成敏感資訊洩露。
7、功能級訪問控制缺失
JavaEE 同時支援宣告式和程式設計兩種訪問控制方式,像 Spring 等框架也支援基於註解的訪問控制,但是很多應用程式還是選擇建立自己的訪問控制流程,其實這是非常危險的行為。更重要的是要確保每一個暴露出去的介面和 Web 服務要有正確的訪問控制,千萬不要想當然的假設客戶應該可以控制一切,這樣黑客就可以直接訪問程式了。
8、 跨站請求偽造(CSRF )
每一個狀態改變,應用程式都應該校驗該請求是否偽造,開發者在每一個使用者會話裡面放置一個隨機令牌,然後每次請求進來都進行校驗,否則攻擊者可能會建立一些包含有害標籤,例如:IMG, SCRIPT, FRAME 或者 FORM,這些標籤可能會指向沒有保護的應用程式,當受害者訪問這樣的頁面,瀏覽器就會自動產生一個偽造的 HTTP 請求到標籤裡指定的 URL,這個 URL 通常會包含受害者的憑證。
9、使用含有已知漏洞的元件
現代 JavaEE 應用程式通常會包括數百種庫,尤其像依賴管理工具問世5年來,這個數目更是爆炸式的增長。廣泛應用的Java 庫都包含了很多已知漏洞,這些漏洞非常危險。對這些漏洞沒有其他辦法,只能等庫的提供商修復漏洞,及時更新到最新版本。
10、未驗證的重定向和轉發
Web 應用程式經常將使用者重定向或轉發到其他網頁和網站,並且利用不可信的資料去判定目的頁面。如果沒有得到適當驗證,攻擊者可以重定向受害使用者到釣魚軟體或惡意網站,或者使用轉發去訪問未授權的頁面, 在 JavaEE Web 程式裡當呼叫 response.sendRedirect() 在使用 request.getParameter() 或 request.getCookie() 去獲取不信任的資料時,經常會發生這種情況。
每個 JavaEE 程式設計師一定會經常遇到這十個安全問題,同時新的攻擊和漏洞不斷地被發現,我們現在能做的就是在開發、測試和部署的過程中不斷地用安全程式碼檢查工具對專案進行掃描,檢查不修復漏洞。
大家可以嘗試用 Eclipse 的一些免費對比外掛來檢查這些漏洞,這些不僅是靜態分析工具,C4E 是一個非常有代表意義的工具,它利用 Java Instrumentation API 去見監控應用中所有和安全相關的內容。 它還可以實時分析整個資料流,在一個複雜的應用裡從請求開始跟蹤資料。 比如 JavaEE Web 應用裡常見的資料流如下:程式碼從 request 取得引數,用 base64 解碼,把資料存到 Map 裡,再將 Map 存到一個 Bean 裡面,然後將這個Bean 放到 Session 裡作為 attribute,最後從 JSP 裡取出,使用 EL 語言將這個 Bean 值填入頁面。Eclipse 對比工具就可以跟蹤這個資料流並報告是否存在 XSS 漏洞。這個工具非常方便,甚至對使用了非常複雜的框架和庫的應用程式也管用,較現有的很多分析工具在速度,準確性和易用性上都有明顯優勢。
當然,還有現在非常流行的 RASP(Runtime Aplication Security Protector),也是對付這十大安全問題的利器,它將程式碼實時檢查和實時攔截相結合,將安全保護程式碼和應用程式結合在一起,像疫苗一樣使應用程式具備自我免疫的能力。這是 Gartner 極力推薦的應用程式安全保護方案,它使用非常方便,保護實時徹底,容易使用,不需要修改任何應用程式程式碼就可以輕鬆實現安全保護。
相關文章
- OWASP重點突出的Web應用程式中10大關鍵漏洞Web
- 10大最常見的資料庫安全問題資料庫
- web應用存在的10大安全問題,安全測試不容忽視!Web
- urlrewrite-------解決大型WEB系統URL暴露安全問題Web
- OWASP IoT Top 10 釋出,來看看物聯網安全的十大坑
- web 跨域請求安全問題Web跨域
- 8 大前端安全問題(上)前端
- 8 大前端安全問題(下)前端
- 為什麼 OWASP API 安全Top 10 對企業很重要API
- 網安雲知識 | OWASP TOP 10之安全配置錯誤
- NP-完全問題
- Codeup 貨幣系統(完全揹包問題)
- 如何測試OWASP Top 10
- OWASP TOP 10 2021
- 管理連線系統中 Web 服務的體系結構問題Web
- 熟悉面試中常見的的 web 安全問題面試Web
- 【常見Web應用安全問題】—7、CRLFinjectionWeb
- 【常見Web應用安全問題】—12、URLredirectionWeb
- 怎麼處理ERP體系軟體資料的安全問題
- [PHP 安全] OWASP 維護的 PHP 安全配置速查表PHP
- 如何解決大資料安全問題大資料
- web安全機制問題詳解之二:CSRFWeb
- PHP 安全問題入門:10 個常見安全問題 + 例項講解PHP
- OWASP Top 10關鍵點記錄
- WEB開發者應該反問自己的10個問題Web
- web安全機制問題詳解之一:XSSWeb
- 【常見Web應用安全問題】—4、DirectorytraversalWeb
- 2022 OWASP中國安全技術論壇
- 《網路安全體系結構》一1.12應用知識問題
- 解決軟體供應鏈安全問題
- 我在開發中常忽視的安全問題
- 大資料應用需注意哪些安全問題大資料
- 大資料平臺需注意哪些安全問題大資料
- EJB 在WEB和Clien中t的並存問題Web
- 解決軟體供應鏈安全問題需要關注哪些問題
- 自查Web網站專案的10個問題Web網站
- Web開發基本準則 , Web訪問安全Web
- 資料探勘常見10大問題