代碼分析:一條命令跑通你的第一次代碼掃描)
Semgrep 靜態(tài)代碼分析一條命令跑通你的第一次代碼掃描【免費(fèi)下載鏈接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/se/semgrep上線(xiàn)前你大概翻過(guò)三遍代碼找有沒(méi)有寫(xiě)死的密鑰和危險(xiǎn)調(diào)用。Semgrep 是個(gè)靜態(tài)代碼分析工具把這類(lèi)檢查變成一條命令的事。下面帶你從安裝到出結(jié)果走完整個(gè)流程。先搞清楚Semgrep 是干什么的它給誰(shuí)用給寫(xiě)業(yè)務(wù)代碼、又不想學(xué)一堆靜態(tài)分析術(shù)語(yǔ)的你。它做什么拿你寫(xiě)的代碼模式去匹配整個(gè)倉(cāng)庫(kù)報(bào)出可疑位置。寫(xiě)規(guī)則時(shí)不用碰抽象語(yǔ)法樹(shù)也不用和正則較勁模式本身就長(zhǎng)得像源碼。它怎么跑在你本機(jī)或構(gòu)建環(huán)境里執(zhí)行代碼默認(rèn)不上傳。最快的安裝方式三種裝法挑一個(gè)就行# macOS brew install semgrep # Ubuntu / Linux / macOS python3 -m pip install semgrep # 或者不裝直接跑 Docker docker run --rm -v ${PWD}:/src semgrep/semgrep semgrep --version然后驗(yàn)證一下semgrep --version能打印出版本號(hào)就說(shuō)明裝好了。在倉(cāng)庫(kù)里掃第一遍進(jìn)到任意項(xiàng)目的根目錄執(zhí)行semgrep scan --configauto--configauto會(huì)按你的代碼語(yǔ)言自動(dòng)挑一套現(xiàn)成規(guī)則。掃完它會(huì)逐條列出發(fā)現(xiàn)文件位置、哪一行、什么問(wèn)題、建議怎么改不用再逐行翻日志了。寫(xiě)一條自己的規(guī)則想讓檢查符合項(xiàng)目自己的規(guī)范在項(xiàng)目根目錄建一個(gè)my-rules.yml把團(tuán)隊(duì)約定寫(xiě)進(jìn)去rules: - id: python-no-prints-in-prod languages: [python] pattern: print(...) message: 生產(chǎn)代碼請(qǐng)用 logging別用 print severity: INFO再跑semgrep scan --configmy-rules.yml代碼里的print()就會(huì)被逐處標(biāo)記出來(lái)。規(guī)則文件支持 30 多種語(yǔ)言語(yǔ)法就是你平時(shí)寫(xiě)的代碼本身。多攢幾條倉(cāng)庫(kù)里就有現(xiàn)成的用例可以參考tests/rules/。新手踩坑速查現(xiàn)象掃描速度慢 → 處理用--include*.py之類(lèi)參數(shù)把范圍縮小到指定目錄或文件?,F(xiàn)象寫(xiě)了規(guī)則卻沒(méi)命中 → 處理檢查languages字段是否和文件后綴對(duì)得上模式寫(xiě)法以真實(shí)代碼為準(zhǔn)?,F(xiàn)象誤報(bào)看著心煩 → 處理把severity調(diào)低或用--exclude把無(wú)關(guān)目錄排除掉。把掃描放進(jìn)提交前和 CI在 Makefile 里加一個(gè)目標(biāo)提交前或 CI 里跑一下每次只盯著新增問(wèn)題check: semgrep scan --configauto --error--error會(huì)在發(fā)現(xiàn)問(wèn)題時(shí)返回非零退出碼流水線(xiàn)就能據(jù)此卡住構(gòu)建。現(xiàn)在就做裝好 Semgrep跑一次semgrep scan --configauto看看你的項(xiàng)目現(xiàn)在有什么。挑一條最煩人的問(wèn)題寫(xiě)條自己的規(guī)則盯住它。把掃描接進(jìn) CI讓檢查在合并前自動(dòng)完成。工具裝好了剩下的交給命令?!久赓M(fèi)下載鏈接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/se/semgrep創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考