每个Java开发人员都必须避免的9个安全错误
Checkmarx CxSAST是功能強大的源代碼分析(SCA)解決方案,旨在從根本上識別,跟蹤和修復技術和邏輯安全缺陷:源代碼。 在這里查看 !
自從1995年中期引入Java以來??,它已經走了很長一段路。 它的跨平臺特性使其成為客戶端Web編程的基準。 但是由于網絡犯罪和黑客行為由于其廣泛的使用和分布而達到流行的程度,因此安全的Java開發需求已成為當務之急。
卡巴斯基實驗室最近的一份報告稱, Java是受到攻擊最多的編程語言,全球范圍內越來越多的黑客事件被舉報。 Java的易感性很大程度上歸因于其分段問題。 并非所有開發人員都在使用最新版本(Java 9),這基本上意味著并非總是應用最新的安全更新。
應用程序安全領域內越來越多的共識是,高代碼完整性是確保應用程序健壯并不受頂級黑客技術攻擊的最佳方法。 以下文章基于OWASP Java項目松散地包含9條建議,這是一項全面的工作,旨在幫助Java和J2EE開發人員生成可靠的應用程序。
每個Java開發人員都必須避免的9種編碼應用程序錯誤做法
AppSec弊端1 –不限制對類和變量的訪問
Java中公開的類,方法或變量基本上是對壞蛋的公開邀請。 確保所有這些默認情況下都設置為私有。 這將自動提高應用程序代碼的健壯性,并阻塞潛在的攻擊途徑。 應該使用訪問器來限制可訪問性,并且應明確記錄非私有事物。
AppSec Malpractice 2 –取決于初始化
開發人員應該意識到,構造函數不是必須實例化Java對象的事實。 分配未初始化對象的備用方法的存在是必須解決的安全問題。 理想的解決方案是對類進行編程,以使對象在執行任何操作之前先驗證初始化。
可以通過執行以下步驟來實現:
- 所有變量都應設為私有。 外部代碼應該只能通過安全的get和set方法訪問這些變量。
- 每個對象都應添加初始化的私有布爾變量。
- 在執行任何操作之前,應使用所有非構造方法來驗證初始化是否為true。
- 如果要實現靜態初始化程序,請確保所有靜態變量都是私有變量,并使用classInitialized。 就像上面提到的那樣,靜態初始化器(或構造器)在執行任何操作之前必須確保classInitialized為true。
AppSec Malpractice 3 –未完成課程
許多Java開發人員忘記使類(或方法)成為最終的。 這是一種不當行為,有可能使黑客以惡意方式擴展該類。 聲明該類為非公共類并依賴于包范圍限制以確保安全性可能會造成高昂的代價。 您必須使所有類都最終定型,并在確實需要時記錄未定型的類。
AppSec弊端4 –依賴包裝范圍
Java編程語言中中等嚴重性的另一個問題是使用軟件包。 這些軟件包將類,方法和變量組合在一起,以便于訪問,從而有助于開發過程。 但是,黑客可能會在您的程序包中引入流氓類,從而使他們能夠訪問和修改其中的數據。
因此,建議假定軟件包未關閉且可能不安全。
AppSec弊端5 –盡量減少使用內部類的使用
傳統的做法是將所有特權代碼放入內部類中 ,這已被證明是不安全的。 Java字節碼基本上沒有內部類的概念,而內部類基本上只提供包級的安全性機制。 更糟糕的是,即使內部類被聲明為私有的,它也可以訪問外部類的字段。
內部類可以減少Java應用程序代碼的大小和復雜性,可以說使它的錯誤更少,效率更高。 但是可以通過將字節代碼注入到程序包中來利用這些類。 最好的方法是不要完全使用內部類,但是如果這樣做,請確保將它們定義為私有類,就像外部類一樣。
AppSec弊端6 –硬編碼
Java開發人員犯下的最常見的安全錯誤之一就是對敏感信息的硬編碼。 此編程錯誤涉及在代碼內插入敏感密碼,用戶ID,PIN和其他個人數據。 敏感信息應存儲在開發樹中受保護的目錄中。
AppSec錯誤做法7 –允許將敏感數據回顯到UI
java.io軟件包沒有方法來確保對敏感數據的保護。 默認情況下,JDK附帶的keytool應用程序回顯用戶輸入。 Java開發人員應確保為所有擊鍵(通常為“ *”)顯示固定的字符。 例如,可以在Swing GUI應用程序中使用javax.swing.JPasswordField 。
AppSec錯誤做法8-不注意類別的可克隆性
Java中可用的克隆機制可以使黑客創建您定義的類的新實例。 可以執行此操作而無需任何構造的執行。 安全的Java開發基本上就是將對象變成非克隆對象。 這可以通過以下代碼來實現:
如果您想走克隆路線,可以通過使用final關鍵字來實現壓倒性的免疫力。 LOC看起來像下面的代碼片段:
AppSec Malpractice No.9 –過度進行序列化和反序列化
Java具有使對象序列化的機制(反之亦然)。 通常在“關閉” Java虛擬機(JVM)時用于保存對象。 但這是不安全的做法,因為攻擊者隨后可以訪問對象的內部并非法獲取私有/敏感屬性。 writeobject方法可用于防止序列化。
開發人員不應序列化敏感數據,因為那樣的話,它將不受Java虛擬機(JVM)的控制。 如果沒有解決方法,則應對數據進行加密。
反序列化也是如此,反序列化用于從字節流構造對象。 惡意攻擊者可以嘗試模仿合法類,并使用此技術來實例化對象的狀態。 可以使用類似于writeobject的技術來防止反序列化。 如下所示,此安全方法稱為readobject 。
安全SDLC和靜態代碼分析(SCA)
不幸的是,即使是最安全的開發準則和規則也不足以確保Java應用程序代碼完美無缺。 開發人員的錯誤以及開發期間對代碼進行的眾多更改最終導致應用程序代碼中的漏洞和漏洞。 但是組織應該能夠盡快檢測到這些。
當今市場上有各種各樣的應用程序安全解決方案可用,每種解決方案都具有其獨特的功能和優勢。 但是理想的解決方案應該提供全面的功能集,并應集成到軟件開發生命周期(SDLC)的所有階段中,如果可能的話,可以實現自動測試以獲得最佳結果。
屬于靜態應用程序安全測試(SAST)方法論的靜態代碼分析(SCA)就是這樣一種解決方案。 這種技術的好處很多。 它們包括:
- 創建安全的SDLC(sSDLC) –通過將掃描解決方案集成到開發的所有階段,甚至可以在構建完成之前就掃描應用程序代碼。 測試源代碼可以及早緩解漏洞,并顯著加快開發過程。
- 多功能性 – SCA可以無縫地融合到幾乎任何開發環境和模型中。 這可以是傳統的Waterfall方法或持續集成(CICD)模型。由于其快速的掃描速度和準確的結果,該測試解決方案在敏捷和DevOps環境中也有效。
- 最佳的緩解性能 – SCA具有獨特的功能,可以向開發人員顯示代碼中所檢測到的漏洞的確切位置,從而可以快速有效地進行修復。 該安全解決方案還掃描具有廣泛框架兼容性的多種編程和腳本語言。
- 范圍廣泛的漏洞 – SCA涵蓋了廣泛的問題–從應用程序層漏洞一直到編碼漏洞。 甚至可以進行高級分析。 例如,可以通過掃描源代碼來檢測業務邏輯缺陷。 這為組織和開發人員提供了全面的安全解決方案。
- 投資回報(ROI) –總結起來,早期漏洞檢測可以大大縮短補救時間并加快開發速度。 這有助于避免延遲,并最大程度地減少了占用大量資源的維護程序的需求。 換句話說,組織可以節省大量時間和金錢。
當開發人員和安全部門齊頭并進并采取上述步驟時,就可以實現Java應用程序的安全性。 盡管開發人員可以并且應該實踐安全的編碼并生成具有高度完整性的代碼,但CISO和安全人員應實施正確的解決方案,以盡早消除漏洞和漏洞。
只有有關各方的積極主動的方法才能幫助組織創建安全的應用程序。
Checkmarx CxSAST是功能強大的源代碼分析(SCA)解決方案,旨在從根本上識別,跟蹤和修復技術和邏輯安全缺陷:源代碼。 在這里查看 !
翻譯自: https://www.javacodegeeks.com/2015/05/9-security-mistakes-every-java-developer-must-avoid.html
總結
以上是生活随笔為你收集整理的每个Java开发人员都必须避免的9个安全错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联发科否认“大砍 2024 年晶圆投片量
- 下一篇: 微信对方把你删了怎么看出来