靜態(tài)代碼掃描,借用一段網(wǎng)上的原文解釋一下(這里叫靜態(tài)檢查):“靜態(tài)測試包括代碼檢查、靜態(tài)結構分析、代碼質(zhì)量度量等。它可以由人工進行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具自動進行。代碼檢查代碼檢查包括代碼走查、桌面檢查、代碼審查等,主要檢查代碼和設計的一致性,代碼對標準的遵循、可讀性,代碼的邏輯表達的正確性,代碼結構的合理性等方面;可以發(fā)現(xiàn)違背程序編寫標準的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風格的問題,包括變量檢查、命名和類型審查、程序邏輯審查、程序語法檢查和程序結構檢查等內(nèi)容。”。
我看了一系列的靜態(tài)代碼掃描或者叫靜態(tài)代碼分析工具后,總結對工具的看法:靜態(tài)代碼掃描工具,和編譯器的某些功能其實是很相似的,他們也需要詞法分析,語法分析,語意分析...但和編譯器不一樣的是他們可以自定義各種各樣的復雜的規(guī)則去對代碼進行分析。
以下將會列出的靜態(tài)代碼掃描工具,會由于實現(xiàn)方法,算法,分析的層次不同,功能上會差異很大。有的可以做SQL注入的檢查,有的則不能(當然,由于時間問題還沒有對規(guī)則進行研究,但要檢查復雜的代碼安全漏洞,是需要更高深分析算法的,所以有的東西應該不是設置規(guī)則庫就可以檢查到的,但在安全方面的檢查,一定程度上也是可以通過設置規(guī)則進行檢查的)。
.NET
- .NET Compiler Platform(代號羅斯林) -開源編譯器框架,C#和Visual Basic .NET中開發(fā)的微軟 .NET。提供用于分析和操作語法的API。
- CodeIt.Right -結合靜態(tài)代碼分析和自動重構最佳實踐,它允許代碼中的錯誤和違規(guī)行為自動修正; 支持C#和VB.NET。
- 的CodeRush -一個插件的Visual Studio它提醒用戶侵犯最佳做法。
- 的FxCop -免費靜態(tài)分析微軟.NET程序編譯為CIL。獨立和集成在一些微軟的Visual Studio版本; 微軟。
- NDepend的 -簡化了管理,通過分析和可視化代碼的依賴關系,通過定義設計規(guī)則,這樣做影響分析復雜的.NET代碼庫,并通過比較不同版本的代碼。集成到Visual Studio中。
- Parasoft dotTEST -靜態(tài)分析,單元測試和代碼審查的插件為Visual Studio的 ; 適用于語言的Microsoft .NET Framework和.NET Compact Framework,包括C#,VB.NET,ASP.NET和托管C ++。
- 了StyleCop -分析C#源代碼來執(zhí)行一組風格和一致性規(guī)則。它可以從內(nèi)部運行的Microsoft Visual Studio中或整合到MSBuild的項目。
?,C ++
- Astrée -查找所有可能的運行時錯誤由抽象解釋,可以證明不存在運行時錯誤,并能證明功能的斷言; 針對對安全至關重要的C代碼(例如航空電子設備)。
- BLAST - (伯克利懶惰抽象軟件驗證工具) -對C程序的基礎上慵懶抽象的開源軟件模型檢測(后續(xù)項目CPAchecker。[5])。
- Cppcheck -開源的工具來檢查幾種類型的錯誤,包括使用STL。
- cpplint -一個開源的工具,它檢查是否符合谷歌的風格指南對C ++編碼。
- Clang -一個開放源代碼編譯器,它包括一個靜態(tài)分析器它包括一個靜態(tài)分析器。
- Coccinelle的 -一個開源的源代碼模式匹配和改造。
- Cppdepend -簡化了管理,通過分析和可視化代碼的依賴關系,通過定義設計規(guī)則,這樣做影響分析,并比較不同版本的代碼的復雜的C / C ++代碼庫。
- ECLAIR -對于自動分析,驗證,C和C ++程序的測試和轉化的平臺。
- Eclipse(軟件) -一種開放源碼的IDE,包括靜態(tài)代碼分析儀(CODAN)。
- Fluctuat - 抽象解釋的程序數(shù)值屬性的驗證。
- Frama-C -一個開源的靜態(tài)分析框架C.
- Goanna -軟件分析工具,用于C / C ++。
- Klocwork的靜態(tài)代碼分析 -靜態(tài)分析工具,用于C / C ++。
- Lint -原來的靜態(tài)代碼分析儀C.
- LDRA Testbed -軟件分析與測試工具套件的C / C ++。
- Parasoft C / C ++test - C / C ++工具,它的靜態(tài)分析,單元測試,代碼審查,并且運行時錯誤檢測; 可用于插件的Visual Studio和Eclipse的基礎的集成開發(fā)環(huán)境。
- PC-Lint -軟件分析工具,用于C / C ++。
- Polyspace -使用抽象解釋檢測和證明不存在的運行時間錯誤,在死代碼的源代碼以及用于檢查所有MISRA(2004,2012),規(guī)則(指令,非指令)。
- PVS-Studio -軟件分析工具,用于C,C ++,C ++ 11,C ++ / CX(組件擴展)。
- PRQA QA·C與QA·C ++ -的C / C ++質(zhì)量保證和方針/編碼標準執(zhí)法與MISRA支持深度靜態(tài)分析。
- SLAM project -一期工程微軟研究院檢查它使用的接口軟件滿足的關鍵行為屬性。
- Sparse -一個開源工具,旨在發(fā)現(xiàn)故障的Linux內(nèi)核。
- Splint -一個開源的進化版皮棉,為C.
- ...
Java
- Checkstyle -除了一些靜態(tài)代碼分析,它可以用來顯示侵犯一個配置編碼標準。
- FindBugs -一個開源的靜態(tài)分析字節(jié)碼的Java(基于雅加達 BCEL馬里蘭大學)。
- IntelliJ IDEA -跨平臺的Java IDE,具有自己的一套幾百代碼檢查可在即時在整個項目的編輯和批量分析分析代碼。
- JArchitect -簡化了分析和可視化代碼的依賴關系,通過定義設計規(guī)則,這樣做影響分析,并通過比較不同版本的代碼管理復雜的Java代碼庫。
- Jtest -測試和靜態(tài)代碼分析產(chǎn)品通過Parasoft的。
- LDRA Testbed -軟件分析與測試工具套件的Java。
- PMD -靜態(tài)規(guī)則集基于Java源代碼分析器,能夠識別潛在問題。
- SemmleCode -面向?qū)ο蟮拇a查詢靜態(tài)程序分析。
- Sonargraph(原SonarJ) -代碼為目的的架構顯示器的一致性,也計算了廣泛的軟件度量。
- Soot -一個語言處理和優(yōu)化框架由中間語言的Java。
- Squale -管理軟件質(zhì)量的平臺(也可用于其他語言,使用商業(yè)分析工具雖然)。
- SonarQube -對代碼質(zhì)量的持續(xù)檢查的開源平臺。
- SourceQube -一個獨立于平臺的命令行靜態(tài)源代碼分析器用于Java,C / C ++,RPG IV(AS / 400)和Python。
- ThreadSafe -一個靜態(tài)分析工具,用于Java的重點是尋找并發(fā)錯誤。
- ...
JavaScript
- Google's Closure Compiler -的JavaScript優(yōu)化器重寫代碼,以更快,更小,并檢查使用本地JavaScript功能。
- JSLint -的JavaScript 語法檢查和驗證。
- JSHint - JSLint的的社區(qū)驅(qū)動的叉。
Objective-C, Objective-C++
Perl
- Perl::Critic -一個工具來幫助實施通用Perl的最佳實踐。大多數(shù)的最佳做法是基于達米安康威的Perl的最佳實踐的書。
- PerlTidy -程序作為一個語法檢查和測試儀/實施者在Perl的編碼實踐。
- Padre- Perl的一個IDE,它也提供了靜態(tài)代碼分析檢查常見的初學者的錯誤。
Python的[ 編輯]
Fortify:
ASPECT:
http://www.aspectsecurity.com/
OWASP:
http://www.owasp.org/index.php/Main_Page
securitycompass:
http://www.securitycompass.com/resources.shtml
參考資料:
- http://www.dwheeler.com/flawfinder/
- http://www.java2s.com/Product/Java/Byte-Source-Code/Source-Analysis-Diagram.htm
- http://www.softwarelist.cn/?fsid=53&cid=530&cpath=ABAN
- http://www.hacker.com.cn/article/view_14804.html
- http://www.cs.cmu.edu/~aldrich/courses/654/tools/
注:以上鏈接列舉了大量相關工具
原文鏈接:https://blog.csdn.net/dongwuming/article/details/49423909