用 Bandit 靜態掃描工具,掃描 Python 專案中的安全性問題

Last updated on  Apr 16, 2024  in  Python 模組/套件推薦 , Python 資訊安全  by  Amo Chen  ‐ 2 min read

這陣子看了 10 common security gotchas in Python and how to avoid them , 該文章主要介紹幾種撰寫 Python 程式時需注意的安全問題,例如處理來自外部的 XML, YAML 檔案等可能會面臨的安全性問題,相當值得一讀,保證精彩。

該文的最後也介紹一款 Python 的靜態掃描工具 Bandit , 幫助我們找出程式內可能的漏洞或問題。

Bandit 是由 PyCQA(Python Code Quality Authority) 所開發的專案,有用過 Pylint 的朋友們應該都會知道 PyCQA

接下來就一起試試如何使用 Bandit 找出程式的潛在問題吧!

本文環境

  • Python 3
  • Bandit 1.7

安裝 Bandit 的指令如下:

$ pip install bandit

下載 repo 作為掃描目標

首先,用 git 指令下載 requests 套件作為試刀對象吧!

$ git clone https://github.com/kennethreitz/requests

接著使用以下指令掃描 requests/src/ , 也就是 requests 套件主要程式碼的資料夾:

$ bandit -r requests/src -f html -o bandit.report.html

上述指令參數的部分解說:

  • -r requests/src 掃描 requests/src 內的所有資料夾及檔案
  • -f html 將掃描報告的格式設定為 html
  • -o bandit.report.html 將報告輸出至檔案 bandit.report.html

執行完畢之後,以瀏覽器打開 bandit.report.html 即可看到報告內容:

報告中會顯示每個問題的嚴重程度(Severity), 可信度(Confidence), 檔案及有問題的部分程式碼作為參考,比較方便我們一一排除是否真有問題。

requests 套件為例,其報告顯示該套件使用到 MD5 弱安全性的雜湊(hash)演算法,並非是真正有安全性問題,因為該套件使用 MD5 演算法是為了實作 Digest access authentication ,所以並沒有問題。

但如果 MD5 雜湊演算法被運用在密碼的雜湊上,那麼就會有相當大的安全問題,所以使用 Bandit 這類的程式碼靜態分析工具相當重要,我們可以在 CI/CD 流程中或者 git 的 pre-commit 加入用 Bandit 掃描的步驟,趁早在錯誤釀成之前發現並解決它,把未來可能加班的因素減少,擁有健康的職業生涯!

以上是關於 Bandit 的簡單介紹,除了上述介紹到的參數外,歡迎大家翻閱 Bandit 文件 學習更多關於 Bandit 的用法!

延伸閱讀

用 pre-commit 輕鬆提升程式碼品質

References

10 common security gotchas in Python and how to avoid them

Bandit

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!