導航:首頁 > 編程語言 > 安全編程代碼靜態分析

安全編程代碼靜態分析

發布時間:2022-11-03 17:14:44

❶ 做靜態代碼分析都是用那個軟體的

本文首先介紹了靜態代碼分析的基本概念及主要技術,隨後分別介紹了現有 4 種主流 java 靜態代碼分析工具 (Checkstyle,FindBugs,PMD,Jtest),最後從功能、特性等方面對它們進行分析和比較,希望能夠幫助 Java 軟體開發人員了解靜態代碼分析工具,並選擇合適的工具應用到軟體開發中。


引言

在 Java 軟體開發過程中,開發團隊往往要花費大量的時間和精力發現並修改代碼缺陷。Java 靜態代碼分析(static code analysis)工具能夠在代碼構建過程中幫助開發人員快速、有效的定位代碼缺陷並及時糾正這些問題,從而極大地提高軟體可靠性並節省軟體開發和測試成 本。目前市場上的 Java 靜態代碼分析工具種類繁多且各有千秋,因此本文將分別介紹現有 4 種主流 Java 靜態代碼分析工具 (Checkstyle,FindBugs,PMD,Jtest),並從功能、特性等方面對它們進行分析和比較,希望能夠幫助 Java 軟體開發人員了解靜態代碼分析工具,並選擇合適的工具應用到軟體開發中。

靜態代碼分析工具簡介

什麼是靜態代碼分析

靜態代碼分析是指無需運行被測代碼,僅通過分析或檢查源程序的語法、結構、過程、介面等來檢查程序的正確性,找出代碼隱藏的錯誤和缺陷,如參數不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現的空指針引用等等。

在軟體開發過程中,靜態代碼分析往往先於動態測試之前進行,同時也可以作為制定動態測試用例的參考。統計證明,在整個軟體開發生命周期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是可以通過靜態代碼分析來發現和修復的。

但是,由於靜態代碼分析往往要求大量的時間消耗和相關知識的積累,因此對於軟體開發團隊來說,使用靜態代碼分析工具自動化執行代碼檢查和分析,能夠極大地提高軟體可靠性並節省軟體開發和測試成本。

靜態代碼分析工具的優勢

1. 幫助程序開發人員自動執行靜態代碼分析,快速定位代碼隱藏錯誤和缺陷。

2. 幫助代碼設計人員更專注於分析和解決代碼設計缺陷。

3. 顯著減少在代碼逐行檢查上花費的時間,提高軟體可靠性並節省軟體開發和測試成本。


Java 靜態代碼分析理論基礎和主要技術

❷ 軟體破解中靜態分析與動態分析有什麼區別

軟體破解中靜態分析與動態分析區別為:對象不同、代碼覆蓋率不同、檢測不同。

一、對象不同

1、靜態分析:靜態分析是對程序文件(非運行狀態)行跟蹤。

2、動態分析:動態分析是對運行著的程序進行跟蹤。

二、代碼覆蓋率不同

1、靜態分析:靜態分析有完整的代碼覆蓋率。無論一個代碼塊或另一個代碼塊在執行時獲得控制的頻率,靜態分析都會檢查整個代碼庫。

2、動態分析:動態分析不能保證完整的代碼覆蓋率。需要向程序中饋入足夠的數據以獲得更好的結果並獲得盡可能多的代碼覆蓋率。

三、檢測不同

1、靜態分析:靜態分析不利於檢測內存泄漏和與並發相關的錯誤。

2、動態分析:動態分析可以檢測復雜的內存處理錯誤,例如超出數組范圍的索引編制和內存泄漏。

(2)安全編程代碼靜態分析擴展閱讀

程序靜態分析是與程序動態分析相對應的代碼分析技術,它通過對代碼的自動掃描發現隱含的程序問題,主要具有以下特點:

(1)不實際執行程序。動態分析是通過在真實或模擬環境中執行程序進行分析的方法,多用於性能測試、功能測試、內存泄漏測試等方面。與之相反,靜態分析不運行代碼只是通過對代碼的靜態掃描對程序進行分析。

(2)執行速度快、效率高。目前成熟的代碼靜態分析工具每秒可掃描上萬行代碼,相對於動態分析,具有檢測速度快、效率高的特點。

(3)誤報率較高。代碼靜態分析是通過對程序掃描找到匹配某種規則模式的代碼從而發現代碼中存在的問題,例如可以定位strcpy()這樣可能存在漏洞的函數,這樣有時會造成將一些正確代碼定位為缺陷的問題,因此靜態分析有時存在誤報率較高的缺陷,可結合動態分析方法進行修正。

❸ 程序靜態分析的著名的靜態分析工具

Meta-Compilation(Coverity)
由Stanford大學的Dawson Engler副教授等研究開發,該靜態分析工具允許用戶使用一種稱作metal的狀態機語言編寫自定義的時序規則,從而實現了靜態分析工具的可擴展性。MC的實際效果非常優秀,號稱在Linux內核中找出來數百個安全漏洞。MC目前已經商業化,屬於Coverity Inc.2014年被Synopsys收購。目前學術領域比較認可的靜態分析工具,其技術處於領先地位。
mygcc 由一個法國人N. Volanschi開發,其思想來源於MC,試圖將自定義的錯誤檢測集成到編譯時。
Klocwork
國內用的最為廣泛的靜態分析工具,由加拿大北電於1996年研發,是中國最早的能夠檢測語義缺陷的靜態分析工具。截止到2015年其版本號為V10,也就是大家常說的K10
LDRA Testbed
英國的編碼規則類檢測工具,前身為Liverpool大學開發,能夠支持C/C++數千種條目的規則檢測,包括MISRA C/C++, GJB5369等,是最早進入中國市場的靜態分析工具,在軍隊、軍工廣泛使用,但其技術僅支持風格類檢測,無法進行語義缺陷分析,導致一些常用的運行時缺陷無法發現或者較高誤漏報,由此市場佔有率逐步下降。截止到2015年其版本號為9.5
HP Fortify
美國HP公司的支持安全漏洞類的檢測工具,能夠檢測C/C++/Java/PHP/ASP/JavaScript等多種語言,數千種檢測項,是國內使用最為廣泛的靜態分析工具。但該工具整體的誤報漏報率較高,雖然支持很多種安全漏洞,但需要用戶做很多的二次開發工作。
Cobot(庫博)
北京大學軟體工程中心研發的靜態分析工具,能夠支持編碼規則,語義缺陷的程序分析,能夠支持C/C++數千條規則和缺陷的檢測,是我國唯一可以稱的上是靜態分析產品的商業化工具。由於其自主知識產權,對國內的操作系統,編碼標准支持的較好,檢測精度也基本與上述工具持平,所以也得到了很多用戶的認可。
Parasoft C++Test
美國Parasoft公司研發的支持C、C++靜態分析的工具,該工具除了可以檢測編碼規則外,還能檢測少量的語義缺陷,此外能夠進行測試用例生成。

❹ 什麼是靜態測試靜態測試主要採用哪些測試方法

靜態測試是指不運行被測程序本身,僅通過分析或檢查源程序的語法、結構、過程、介面等來檢查程序的正確性。靜態測試主要採用白盒測試方法。

對需求規格說明書、軟體設計說明書、源程序做結構分析、流程圖分析、符號執行來找錯。靜態方法通過程序靜態特性的分析,找出欠缺和可疑之處,例如不匹配的參數、不適當的循環嵌套和分支嵌套、不允許的遞歸、未使用過的變數、空指針的引用和可疑的計算等。靜態測試結果可用於進一步的查錯,並為測試用例選取提供指導。

(4)安全編程代碼靜態分析擴展閱讀

靜態測試包括代碼檢查、靜態結構分析、代碼質量度量等。它可以由人工進行,充分發揮人的邏輯思維優勢,也可以藉助軟體工具自動進行。代碼檢查包括代碼走查、桌面檢查、代碼審查等,主要檢查代碼和設計的一致性,代碼對標準的遵循、可讀性,代碼的邏輯表達的正確性,代碼結構的合理性等方面。

可以發現違背程序編寫標準的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風格的問題,包括變數檢查、程序邏輯審查、程序語法檢查和程序結構檢查等內容。

在實際使用中,代碼檢查比動態測試更有效率,能快速找到缺陷,發現30%~70%的邏輯設計和編碼缺陷;代碼檢查看到的是問題本身而非徵兆。

但是代碼檢查非常耗費時間,而且代碼檢查需要知識和經驗的積累。代碼檢查應在編譯和動態測試之前進行,在檢查前,應准備好需求描述文檔、程序設計文檔、程序的源代碼清單、代碼編碼標准和代碼缺陷檢查表等。

靜態測試具有的發現缺陷早、降低返工成本、覆蓋重點和發現缺陷的概率高的優點以及耗時長、不能測試依賴和技術能力要求高的缺點。

❺ 什麼叫靜態安全分析及動態安全分析

安全分析是對運行中的網路或某一研究態下的網路,按N-1原則,研究一個個運行元件因故障退出運行後,網路的安全情況及安全裕度。靜態安全分析是研究元件有無過負荷及母線電壓有無越限。動態安全分析是研究線路功率是否超穩定極限

❻ 靜態代碼分析 和 代碼審計的區別

靜態代碼分析是代碼審計的方式之一,即代碼審計也可以通過其他方式來審查源碼的安全。比如,運行該源碼,執行針對性的操作等。
靜態代碼分析就是在不運行軟體源碼的情況下,從數據流、語義、結構、控制流、配置流等方面對源代碼進行的分析。
代碼審計(Code
audit)是一種以發現程序錯誤,安全漏洞和違反程序規范為目標的源代碼分析。

❼ 靜態分析是指

經濟領域概念
靜態分析是一種分析經濟現象的均衡狀態以及有關的經濟變數達到均衡狀態所需要條件的分析方法。[1]而不考慮經濟現象達到均衡狀態的過程,它完全抽象掉了時間因素和具體的變化過程,是一種靜止地、孤立地考察某種經濟事物的方法。
網路


靜態分析
經濟領域概念
靜態分析是一種分析經濟現象的均衡狀態以及有關的經濟變數達到均衡狀態所需要條件的分析方法。[1]而不考慮經濟現象達到均衡狀態的過程,它完全抽象掉了時間因素和具體的變化過程,是一種靜止地、孤立地考察某種經濟事物的方法。

中文名
靜態分析
外文名
static analysis
指標
總量指標、相對指標、平均指標、標志變異指標等
應用
靜態計算機科學、經濟學、工程、力學、機械
釋義
根據既定的外生變數值求得內生變數的分析方法
內涵
靜態分析法是根據既定的外生變數值求得內生變數的分析方法,是對已發生的經濟活動成果,進行綜合性的對比分析的一種分析方法。

如研究均衡價格時,舍掉時間、地點等因素,並假定影響均衡價格的其他因素,如消費者偏好、收入及相關商品的價格等靜止不變,單純分析該商品的供求達於均衡狀態的產量和價格的決定。簡單地說就是抽象了時間因素和具體變動的過程,靜止地孤立地考察某些經濟現象。它一般用於分析經濟現象的均衡狀態以及有關經濟變數達到均衡狀態所需要的條件。

常用的靜態分析法有:相對數分析法、平均數分析法、比較分析法、結構分析法、因素替換分析法、綜合計算分析法、價值系數分析法等。

指標

❽ 靜態代碼分析應該怎麼操作呢

靜態代碼分析是代碼審計的方式之一,即代碼審計也可以通過其他方式來審查源碼的安全。比如,運行該源碼,執行針對性的操作等。

靜態代碼分析就是在不運行軟體源碼的情況下,從數據流、語義、結構、控制流、配置流等方面對源代碼進行的分析。
代碼中的bug往往是由於開發者忽略一些代碼缺陷而造成的,這些代碼缺陷可能是極其微小的錯誤,以至於在程序的編譯期並未給出很好的錯誤,從而導致這些代碼缺陷在程序的運行期以某種非正常形式呈現出來。

那麼對於開發這開說,這些微小的代碼缺陷,往往是很難跟蹤調試的,因此也為修復代碼帶來了很大困難。Xcode靜態代碼分析的作用即發現項目源代碼中的某些代碼缺陷,並分類進行提示,以方便開發者及時關注並加以修改,從而把代碼缺陷(潛在的bug)及時清除。

❾ 靜態代碼中能檢測到的錯誤有哪些

在傳統意義上認為,錯誤檢測應該是動態的系統測試的范圍。但在bug的成本上分析,有以下公認的結論。

bug發現的越晚,修正的成本就越高,測試階段修正bug的成本是編碼階段的約4倍的關系。為了減少成本,bug被發現的越早越好。在編程階段,靜態的分析代碼就能找到代碼的bug,是很多人的夢想。這個夢想在21世紀初變成了現實。以PolySpace、Klocwork、Coverity為代表的靜態分析軟體,實現了只要靜態分析代碼,就可以發現代碼的bug,例如數組越界、除數為0、緩沖區溢出等,雖然還不是特別完美。微軟在其最新的開發工具VisualStudio2005的teamsystemediton中集成了安全工具PREFix。PREFix原來就是著名的靜態分析工具,後被微軟收購過來。從微軟的傾向看發展走勢,類似的靜態工具未來會成為市場的主流。PolySpace詳細的信息可以參考我的另外一篇文章《嵌入式軟體動態運行時錯誤的檢測》。

❿ 代碼靜態檢查實現原理

靜態代碼分析原理分為兩種:分析源代碼編譯後的中間文件(如Java的位元組碼);分析源文件。主要分析技術如下:

缺陷模式匹配
事先從代碼分析經驗中收集足夠多的共性缺陷模式,將待分析代碼與已有的共性缺陷模式進行匹配,從而完成軟體安全分析。優點:簡單方便;缺點:需要內置足夠多的缺陷模式,容易產生誤報。

類型推斷/類型推斷
類型推斷技術是指通過對代碼中運算對象類型進行推理,從而保證代碼中每條語句都針對正確的類型執行。

模型檢查
建立於有限狀態自動機的概念基礎上。將每條語句產生的影響抽象為有限狀態自動機的一個狀態,再通過分析有限狀態機達到分析代碼目的。
校驗程序並發等時序特性。

數據流分析
從程序代碼中收集程序語義信息,抽象成控制流圖,可以通過控制流圖,不必真實的運行程序,可以分析發現程序運行時的行為。

閱讀全文

與安全編程代碼靜態分析相關的資料

熱點內容
自動解壓失敗叫我聯系客服 瀏覽:482
易語言新手源碼 瀏覽:456
oa伺服器必須有固定ip地址 瀏覽:42
傳奇源碼分析是什麼 瀏覽:267
解放壓縮機支架 瀏覽:255
程序員禿頂搞笑相遇 瀏覽:6
IBM手機app商店叫什麼名字 瀏覽:834
jpeg壓縮質量 瀏覽:774
雲伺服器評測對比 瀏覽:145
java日期轉string 瀏覽:221
openfire源碼編譯 瀏覽:897
在線小工具箱引流網站源碼 瀏覽:337
非科班程序員自學 瀏覽:801
壓縮泡沫鞋底底材 瀏覽:219
程序員職場第一課2正確的溝通 瀏覽:679
遇到不合法app應該怎麼辦 瀏覽:91
匯編程序編譯後的文件 瀏覽:80
大智慧均線源碼 瀏覽:374
單片機排阻的作用 瀏覽:216
滴滴金融app被下架如何還款 瀏覽:212