本技術(shù)涉及靜態(tài)代碼掃描,具體涉及一種靜態(tài)代碼掃描方法、裝置及計(jì)算機(jī)設(shè)備。
背景技術(shù):
1、靜態(tài)代碼掃描是一種自動(dòng)化工具,用于分析源代碼的質(zhì)量和安全性。其原理是通過檢查源代碼的文本內(nèi)容,基于ast語法分析或者正則匹配等技術(shù),查找潛在的程序錯(cuò)誤、安全漏洞和不良編程實(shí)踐,而不需要實(shí)際運(yùn)行代碼。靜態(tài)代碼掃描器基于約定俗成的規(guī)則和模式來檢測(cè)代碼中的問題,幫助開發(fā)人員在早期發(fā)現(xiàn)和修復(fù)潛在的缺陷。
2、靜態(tài)代碼掃描中最常見的兩個(gè)問題是:掃描慢和耗資源,造成這兩個(gè)問題的原因是:
3、(1)代碼規(guī)模大:大型項(xiàng)目的代碼量龐大,需要耗費(fèi)更多時(shí)間掃描,代碼量越大,掃描速度就越慢。
4、(2)代碼較復(fù)雜:復(fù)雜的代碼結(jié)構(gòu)、嵌套條件以及循環(huán)等會(huì)增加掃描時(shí)間,導(dǎo)致耗費(fèi)更多資源。
5、(3)掃描規(guī)則數(shù)量多:檢測(cè)代碼中潛在問題需要運(yùn)行多個(gè)規(guī)則和算法來發(fā)現(xiàn)潛在的安全隱患、錯(cuò)誤和不良實(shí)踐,這些規(guī)則越多,掃描耗時(shí)越長。
6、(4)硬件環(huán)境差:掃描過程中硬件性能不佳會(huì)導(dǎo)致速度變慢,而需進(jìn)行更復(fù)雜的代碼分析會(huì)導(dǎo)致更多資源消耗。
7、(5)代碼重復(fù)掃描:同一分代碼多次提交掃描,造成掃描資源大量浪費(fèi)。
8、目前,為了應(yīng)對(duì)靜態(tài)代碼掃描過程中掃描速度慢和資源消耗高的問題,通常采用以下方法:
9、(1)并行處理:用多線程或分布式計(jì)算等技術(shù),將代碼掃描任務(wù)分解成多個(gè)子任務(wù)并行處理,以提高掃描效率。但是,這樣會(huì)額外增加很大的服務(wù)器資源成本。
10、(2)增量掃描:基于代碼提交的差異文件進(jìn)行掃描。但是,這種掃描方法的掃描場(chǎng)景有限。
11、綜上可知,精簡(jiǎn)掃描規(guī)則、降低代碼復(fù)雜性這些都是一些客觀因素,無法真正的解決問題。
技術(shù)實(shí)現(xiàn)思路
1、為此,本技術(shù)提供一種靜態(tài)代碼掃描方法、裝置及計(jì)算機(jī)設(shè)備,以解決現(xiàn)有技術(shù)存在的靜態(tài)代碼掃描方法掃描速度慢和資源消耗高的問題。
2、為了實(shí)現(xiàn)上述目的,本技術(shù)提供如下技術(shù)方案:
3、第一方面,一種靜態(tài)代碼掃描方法,包括:
4、步驟1:獲取代碼倉庫首次掃描結(jié)果,并保存為第一規(guī)則文件;所述第一規(guī)則文件的數(shù)據(jù)結(jié)構(gòu)包括file_md5字段、file_name字段、rule_info字段、repo_id字段和op_time字段;
5、步驟2:獲取代碼倉庫的被掃描文件和掃描規(guī)則,并保存為第二規(guī)則文件;所述第二規(guī)則文件的數(shù)據(jù)結(jié)構(gòu)包括file_md5字段、file_name字段、repo_id字段、rule_id字段、rule_version字段和rule_properties_version字段;
6、步驟3:解析所述第一規(guī)則文件中的rule_info字段,并根據(jù)所述第二規(guī)則文件中的rule_id字段、rule_version字段和ule_properties_version字段判斷掃描規(guī)則是否發(fā)生變化;
7、步驟4:若掃描規(guī)則未發(fā)生變化,則計(jì)算所述第二規(guī)則文件中的file_md5字段的md5值,并根據(jù)所述第一規(guī)則文件和所述第二規(guī)則文件中的md5值和repo_id判斷被掃描文件是否存在,若被掃描文件存在,則刪除被掃描文件的掃描,若被掃描文件不存在,則保留被掃描文件的掃描,得到第二次掃描結(jié)果;
8、步驟5:若掃描規(guī)則發(fā)生變化,則每個(gè)被掃描文件都需要重新掃描,并得到第二次掃描結(jié)果;
9、步驟6:將首次掃描結(jié)果與第二次掃描結(jié)果進(jìn)行合并,得到第二次掃描的完整掃描結(jié)果。
10、作為優(yōu)選,步驟1中,rule_info字段包括規(guī)則id、規(guī)則問題行、規(guī)則版本號(hào)和規(guī)則閾值版本號(hào)。
11、作為優(yōu)選,步驟4中,file_md5字段的md5值計(jì)算公式為:md5(文件的相對(duì)目錄+文件內(nèi)容)。
12、作為優(yōu)選,還包括:判斷被掃描文件是否為新增被掃描文件,若是新增被掃描文件,則新增數(shù)據(jù);若是被復(fù)用的掃描結(jié)果,則更新數(shù)據(jù)。
13、作為優(yōu)選,還包括:根據(jù)所述第一規(guī)則文件和所述第二規(guī)則文件中的op_time字段定時(shí)進(jìn)行數(shù)據(jù)清理。
14、第二方面,一種靜態(tài)代碼掃描裝置,包括:
15、首次掃描結(jié)果獲取模塊,用于獲取代碼倉庫首次掃描結(jié)果,并保存為第一規(guī)則文件;所述第一規(guī)則文件的數(shù)據(jù)結(jié)構(gòu)包括file_md5字段、file_name字段、rule_info字段、repo_id字段和op_time字段;
16、被掃描文件獲取模塊,用于獲取代碼倉庫的被掃描文件和掃描規(guī)則,并保存為第二規(guī)則文件;所述第二規(guī)則文件的數(shù)據(jù)結(jié)構(gòu)包括file_md5字段、file_name字段、repo_id字段、rule_id字段、rule_version字段和rule_roperties_version字段;
17、掃描規(guī)則判斷模塊,用于解析所述第一規(guī)則文件中的rule_info字段,并根據(jù)所述第二規(guī)則文件中的rule_id字段、rule_version字段和ule_properties_version字段判斷掃描規(guī)則是否發(fā)生變化;
18、掃描文件判斷模塊,用于若掃描規(guī)則未發(fā)生變化,則計(jì)算所述第二規(guī)則文件中的file_md5字段的md5值,并根據(jù)所述第一規(guī)則文件和所述第二規(guī)則文件中的md5值和repo_id判斷被掃描文件是否存在,若被掃描文件存在,則刪除被掃描文件的掃描,若被掃描文件不存在,則保留被掃描文件的掃描,得到第二次掃描結(jié)果;
19、掃描模塊,用于若掃描規(guī)則發(fā)生變化,則每個(gè)被掃描文件都需要重新掃描,并得到第二次掃描結(jié)果;
20、掃描結(jié)果合并模塊,用于將首次掃描結(jié)果與第二次掃描結(jié)果進(jìn)行合并,得到第二次掃描的完整掃描結(jié)果。
21、第三方面,一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器和處理器,所述存儲(chǔ)器存儲(chǔ)有計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)一種靜態(tài)代碼掃描方法的步驟。
22、第四方面,一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)一種靜態(tài)代碼掃描方法的步驟。
23、第五方面,一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序或指令,該計(jì)算機(jī)程序或指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)一種靜態(tài)代碼掃描方法的步驟。
24、相比現(xiàn)有技術(shù),本技術(shù)至少具有以下有益效果:
25、本技術(shù)提供了一種靜態(tài)代碼掃描方法、裝置及計(jì)算機(jī)設(shè)備,包括獲取代碼倉庫首次掃描結(jié)果,并保存為第一規(guī)則文件;獲取代碼倉庫的被掃描文件和掃描規(guī)則,并保存為第二規(guī)則文件;解析第一規(guī)則文件中的rule_info字段,并根據(jù)第二規(guī)則文件中的rule_id字段、rule_version字段和ule_properties_version字段判斷掃描規(guī)則是否發(fā)生變化;若掃描規(guī)則未發(fā)生變化,則計(jì)算第二規(guī)則文件中的file_md5字段的md5值,并根據(jù)第一規(guī)則文件和第二規(guī)則文件中的md5值和repo_id判斷被掃描文件是否存在,若被掃描文件存在,則刪除被掃描文件的掃描,若被掃描文件不存在,則保留被掃描文件的掃描,得到第二次掃描結(jié)果;若掃描規(guī)則發(fā)生變化,則每個(gè)被掃描文件都需要重新掃描,并得到第二次掃描結(jié)果;將首次掃描結(jié)果與第二次掃描結(jié)果進(jìn)行合并,得到第二次掃描的完整掃描結(jié)果。本技術(shù)提供的一種靜態(tài)代碼掃描方法、裝置及計(jì)算機(jī)設(shè)備通過復(fù)用重復(fù)掃描文件的結(jié)果,并篩選出新增的文件進(jìn)行掃描,最后再進(jìn)行掃描結(jié)果合并,不僅極大的減少了資源消耗,且提升了掃描效率。