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

Posted on  Mar 24, 2019  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.6.5
  • Bandit 1.5.1

安裝 Bandit 的指令如下:

$ pip install bandit

下載 repo 作為掃描目標

首先,下載 [requests](git clone https://github.com/kennethreitz/requests) 作為試刀對象吧!

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

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

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

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

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

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

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

requests 套件為例,其報告顯示該套件使用到 MD5 弱安全性的雜湊(hash)演算法,並非是真正有安全性問題,因為該套件使用 MD5 演算法是為了實作 Digest access authentication ,所以並沒有問題。如果 MD5 雜湊演算法被運用在密碼的雜湊上,那麼就會有相當大的安全問題。

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

References

https://hackernoon.com/10-common-security-gotchas-in-python-and-how-to-avoid-them-e19fbe265e03

https://github.com/PyCQA/bandit

對抗久坐職業傷害

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

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

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

追蹤新知

看完這篇文章了嗎?還意猶未盡的話,追蹤粉絲專頁吧!

我們每天至少分享 1 篇文章/新聞或者實用的軟體/工具,讓你輕鬆增廣見聞提升專業能力!如果你喜歡我們的文章,或是想了解更多特定主題的教學,歡迎到我們的粉絲專頁按讚、留言讓我們知道。你的鼓勵,是我們的原力!

贊助我們的創作

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

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